前面我们使用Python OpenCV进行了图像的通道操作(使用Python中OpenCV库创建一幅图片的RGB通道图片),还使用OpenCV对微信头像进行处理(一个Pythoner获取微信国旗头像的正确途径,请不要再@微信官方了)。在这过程中我们发现了OpenCV库的强大之处。
今天,我们对OpenCV库的基本操作进行梳理。
不错的图像处理库O'pen'CV
【为什么选择OpenCV】
我们知道,Python中典型的图像库有很多,比如:OpenCV、PIL(Pillow)、skimage。Pillow模块提供了最简单最基本的数字图像处理功能,但功能不是很强大;skimage是基于scipy库的一款图像处理包,正确的写法是sciki-image,它是把图片作为numpy数组进行处理,在这一点上跟OpenCV图像处理方式比较类似,但是scipy库的学习我们还没涉及。因此,今天以OpenCV为例来进行图像处理。
为什么要用OpenCV?
OpenCV实质上是一个c++库,它提供了很多应用程序编写接口。当然,不止是Python了,像R、java、C等典型的编程语言都有接口予以提供。优点来了,就是我们在学习Python的时候掌握了OpenCV的操作,当学习其它语言调用OpenCV进行图像处理时,就会有一种似曾相识的赶脚,一举多得,何乐而不为呢?但是,OpenCV的唯一缺点就是更新速度比较慢。但相信我,这缺点不算什么,因为这个库算是比较成熟的一个库,即使更新速度慢,也丝毫不影响我们使用它进行任何图像处理。
【关于图像的打开
对于图像的操作,当然打开是第一步,不同的库对于图像打开后返回的值是不一样的。我们使用pillow库和OpenCV库同时打开一张图片,看下它们返回的信息。
使用OpenCV和PIL打开图片测试
测试结果如下所示。
测试运行结
打开的图像信息中可以看到,OpenCV打开的图像能够真实无损反映该图像的信息,这些信息都是像素级的,对于图片处理能够更加精准地进行。而PIL的处理时封装在对象里面的,对于处理任何一个像素点,可扩展性和自定义性比较OpenCV就有点弱了,对比提供的方法,OpenCV也是远大于PIL库的。
【关于图像的显示】
图像的显示很简单,直接使用cv2.imshow(windowName, Img)函数即可。现在我们来打开一幅图像并显示它,代码如下图所示。
打开并显示图像
运行程序,执行效果如下图所示。
打开图像成功
对于程序中后两行内容解释如下:
cv2.waitKey():等待键盘响应函数,函数中可以传入具体的毫秒数,表示具体程序等待键盘输入的时间,如果传入特定的毫秒数,则特定毫秒数内按下任意键会返回该键的ASCII码值,程序将会继续运行,如果没有键盘输入则返回-1;如果传入参数为0,则表示持续等待键盘输入,该函数常用于检测是否有特定的键被按下
cv2.destroyAllWindow():删除我们建立的窗口,参数传入窗口名称即可。
我们可以先创建一个窗口,然后再加载显示图片,使用cv2.namedWindow(windowName, windowMode),窗口的windowMode下图会有展示,感兴趣的可以自己实验下,具体代码如下图所示。
先创建一个窗口再展示图像
【关于图像的保存】
图像的保存很简单,直接使用cv2.imwrite(imageName, Image)即可。同样我们打开上述图片,然后更改名称后将文件存储在本地,有人问了,这样有什么用?你可以试试更改图片的后缀名看一下,其实,这个命令可以更改图片类型哦,代码如下图所示。
保存图像文件
代码成功运行,这里就不展示了。
本篇主要对OpenCV的基本操作进行了梳理。感兴趣的朋友可以自己敲代码试试。后续会有更精彩的内容哦,欢迎加关注。
后续内容会更加精彩哦
转载请注明出处,百家号:Python高手养成。