引言
用python进行处理图像,我一开始是使用的PIL库,不过目前看来我需要要转到openCV上了,因为涉及到一些图形处理的算法上,PIL库还是太简单了。openCV作为研究计算机视觉、机器学习等算法的首选库,学会使它对我目前的图像处理的学习还是非常有必要的。
OpenCV库的安装
由于openCV是一种支持多平台多语言的库,所以其安装是非常简单的,直接到官网上下载对应操作系统的安装包安装即可。
由于我这里是要在python中对其进行调用,在windows下还需要另外一步操作:
将 opencv/build/python/2.7/x64/目录下的 cv2.pyd文件(当然如果你的操作系统是32bit的目录则为 opencv/build/python/2.7/x86/),复制到python的安装目录的 Lib/site-packages/子目录中。
在python的命令行中测试import cv2,无错误则表示python对openCV库调用成功。
不过要注意的是:
- 安装的openCV版本需要支持你安装的python的版本
- 需要numpy的支持,所以openCV安装前要确保numpy安装好了
- 推荐同时安装matplotlib库,提供多种图标的绘制,不过这个是可选的
Python中使用OpenCV的对图像的基本操作
官方的说明参考官方说明文档地址为:https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_tutorials.html
详细的使用直接看官方文档,我这里这里只是通过阅读官方文档,整理一些最基本的使用方法和注意事项。
读取图片
使用openCV先需要导入库
1
import cv2
使用imread()函数读取不同格式的图像,返回值numpy.ndarray类型的数据
1
img = cv2.imread('messi5.jpg')
显示图片
使用imshow()函数创建一个窗口来显示图片
1
2
3cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()注意点:
- cv2.imshow()函数第一参数为窗口的名字,第二参数是需要显示的图片。函数可以创建多个窗口,并同时显示,但是窗口名不同相同。
- cv2.waitKey()函数是等待案件消息处理函数,出窗口的消息。
- cv2.destroyAllWindows()销毁所有窗口
保存图片
使用imwrite()函数写入保存图片
1
cv2.imwrite('messigray.png',img)
使用matplotlib画图
显示用灰色模式图片
1
2
3
4
5import cv2
import matplotlib.pyplot as plt
img = cv2.imread("chengbao.jpg",0)
plt.imshow(img, cmap = 'gray')
plt.show()上面代码是显示灰色模式的图片,但是如果是彩色模式的话,要注意一个问题:
OpenCV的色彩模式是BGR模式,而Matplotlib的显示模式是RGB所示,直接OpenCV导入的图片用Matplotlib显示是不能正确显示的。如果需要正确显示的话要将BGR模式转化为RGB模式。处理方法参考stackoverflow上的帖子。
访问和修改pixel Rawdata
cv2.imread()函数的返回值即使图像的Rawdata,是numpy.darray类型的数据。通过这个返回值可以操作图像的原始数据,所以对Rawdata的操作都只要用到numpy的方法就可以了,不管是点操作或者区域操作。
创建边框
使用cv2.copyMakeBorder()函数创建边框
1
constant = cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_CONSTAN,value=[255,0,0])
结果对比如下图: