往期数据分析笔记
【笔记】python数据分析——numpy初识1
【笔记】python数据分析——numpy初识2
【笔记】python数据分析——变换与编程中的轴
【笔记】python数据分析——numpy随机数函数
【笔记】python数据分析——numpy数组索引及切片
【笔记】python数据分析——元素级运算及通用函数
【笔记】python数据分析——条件逻辑运算
【笔记】python数据分析——统计学运算
【笔记】python数据分析——矩阵相乘
图像负片
今天也是给大家带来一个图像负片的案例,让大家了解一下数据分析能够实现的功能,当然了,这个只是一个抛砖引玉的小案例而已
什么是图像负片
图像跟实际图像的明暗刚好相反,这个就称为图像负片
准备要导入的包
今天除了我们很熟悉的numpy包,还有一个包的名字叫pillow包,没有下载的可以下载一下
pip install pillow
然后我们导入需要的两个包
import numpy as np
from PIL import Image
开始对图片进行处理
1.打开图片
img = Image.open('./picture.jpg')
print(img)
运行结果:
<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=4000x2571 at 0x276FAFEB310>
分析一下这个运行结果,mode的意思是样式,这里的RGB指的是三原色,即:红绿蓝,size的意思是大小,也就是说这个图片的大小是4000x2571的
2.将图片对象转成numpy数组
img = np.array(Image.open('./picture.jpg'))
print(img)
运行结果:
这些就是图像转为数组的像素点,这些数字最大的也只不过是255,因为RGB取色的范围是0~255
3.查看一下图片的形状和类型
print(img.shape,img.dtype)
运行结果:
(2571, 4000, 3) uint8
形状里面有三个数,这三个数分别是高度,宽度和样式(三原色)
类型中的uint8,指的是8位无符号整型,即没有负号,我上面也是说过了,三原色取色是在0~255
4.进行负片处理
img2 = np.ones(shape = (2571, 4000, 3))*255-img
print(img2)
运行结果:
上面代码的意思是先创建一个和原图片同样大小都为1的数组,然后乘以255的,这样这个新的数组的值就都为255,然后减去原图片的数组,这样就能让img2的像素点变成img的负像素点
5.将img2数组转为图片
Image.fromarray(img2.astype('uint8')).save('./pictures.jpg')
print('图片负片转换完成')
运行结果:
图片负片转换完成
6.更多想法
我们利用上面的这个想法,是不是我们就可以做一个对图片进行负片操作的软件呢,有朋友可能就要说了,第四步的创建同样大小的负片数组的时候好麻烦,每张图片都要改一次吗?
宝,当然不是这样的了,我在numpy初始1的笔记中就写到了一个带有like后缀的函数,没有看的可以去看看,我在这里直接上最终代码
import numpy as np
from PIL import Image
img = np.array(Image.open('./picture.jpg'))
print(img)
print(img.shape,img.dtype)
img2 = np.ones_like(img)*255-img
print(img2)
Image.fromarray(img2.astype('uint8')).save('./pictures.jpg')
print('图片负片转换完成')
最终图片效果
原图片
图像负片
今日鸡汤
你再优秀,也总有人对你不堪。你再不堪,也有人认为是限量版的唯一。生命的价值在于自己看得起自已,人生的意义在于努力进取。