使用numpy做简单的图像处理

在python中进行图像处理,一般都是用OpenCV, SciKit-Image 但是一些基本简单的处理用numpy就足够了,这里记录下一些简单的使用。

准备

numpy主要处理的类型都是数组,所以我们需要先把图像转换成数组,这样才能够使用numpy进行处理,所以这里就用到了

1
2
import numpy as np
import matplotlib.pylab as plt

载入图像

1
2
3
4
5
6
7
8
# 加载图片
pic = plt.imread("pic.png")
pic.shape
#输出(y轴像素点数, x轴像素点数,图像通道数)
#图像通道数:png是 rgba 4通道,jpg是rgb三通道,因为没有透明,这个需要注意
#查看读入的图像
plt.imshow(line)
plt.show()

图像剪裁

1
2
3
4
5
6
7
cut=pic[100:,:1000,:]
#x轴从100像素,y轴只保留1000像素内,通道数不变
#剪裁后的图像
cut.shape
#查看
plt.imshow(cut)
plt.show()

灰度处理

1
2
3
4
5
6
# 默认灰度
weights = array([[ 0.2989, 0.587 , 0.114 ]])
gray = np.dot(pic[...,:3], weights)
#得到 (R*0.2989+ G*0.5870+ B*0.1140)灰阶值,图像的二维尺寸不变,而减为单通道
plt(gray, cmap='Greys') # 注意要以灰度形式画出
plt.show()

卷积

图像的卷积其实就是对图像施加一个窗口大小的滤波器,来突出图像的某一方面的特质。

这里的卷积要使用另外的科学计算库scipy了,因为我也没用过scipy所以就不细说了,文章后面有参考文档,直接看原文吧。

在卷积神经网络中,其实计算的就是通过反向传播算法来优化这个滤波器的数值,具体的后面有文章会介绍,这里就不细说了。

参考文章

最后附一篇参考文章

Image Processing with Numpy

文章后面有git代码可以直接下载执行。