Python OpenCV图像基础:读取、显示与保存完整指南
本文基于OpenCV Python绑定,详解图像读取、显示与保存的核心操作。重点解析cv2.imread加载图像、cv2.imshow创建窗口及cv2.waitKey防止闪退的机制,并深入讲解cv2.imwrite中JPEG质量与PNG压缩级别的参数设置及类型转换要求,附带完整代码示例。
本文内容源自《OpenCV 2 Computer Vision Application Programming Cookbook》读书笔记的首篇,笔记中将使用Python语言对书中章节代码进行重写与实现。
关于Python环境下OpenCV的具体配置步骤,此处不再赘述。
需特别注意,当前OpenCV for Python是通过NumPy进行绑定的,因此使用者必须掌握NumPy的相关基础知识。
在计算机视觉处理中,图像本质上是一个矩阵;而在OpenCV for Python中,图像直接对应NumPy中的数组对象。
若需读取图像,首先必须导入OpenCV库,具体导入方法如下:
import cv2
接下来演示如何读取并显示图像。
由于Python无需显式声明变量,因此不需要像C++那样使用cv::Mat来定义图像变量,只需直接赋值即可:
img = cv2.imread("D:\cat.jpg")
OpenCV目前支持bmp、jpg、png、tiff等常见图像格式,更详细的支持列表请参阅OpenCV官方参考文档。
随后,需要创建一个用于显示图像的窗口:
cv2.namedWindow("Image")
接着在已创建的窗口中加载并显示图像:
cv2.imshow("Image", img)
最后,代码中必须添加一句关键语句:
cv2.waitKey (0)
若省略最后一句,在IDLE环境中执行时窗口会无响应,而在命令行中执行则会导致窗口一闪而过。
完整的图像读取与显示程序代码如下:
import cv2
img = cv2.imread("D:\\cat.jpg")
cv2.namedWindow("Image")
cv2.imshow("Image", img)
cv2.waitKey (0)
cv2.destroyAllWindows()
程序结束后释放窗口是一个良好的编程习惯:
下面介绍创建或复制图像的方法。
新版OpenCV接口中已移除CreateImage接口,即不存在cv2.CreateImage函数。若要创建图像,需利用NumPy函数(使用OpenCV-Python绑定时必须安装NumPy),示例如下:
emptyImage = np.zeros(img.shape, np.uint8)
在新版OpenCV-Python绑定中,图像的尺寸和通道信息通过NumPy数组的属性来体现。例如输出img.shape可能得到(500, 375, 3),这里以OpenCV自带的cat.jpg为例,末尾的3表示该图像包含RGB三个通道。
此外,也可以通过复制原有图像来生成一副新图像:
emptyImage2 = img.copy();
如果愿意多写几行代码,还可以利用cvtColor函数获取原图像的副本。
emptyImage3=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) #emptyImage3[...]=0
后续通过emptyImage3[...]=0将图像数据置零,从而转换为全黑的空白图像。
接下来介绍如何保存图像。
保存图像操作十分简单,直接调用cv2.imwrite函数即可。
具体调用方式为cv2.imwrite("D:\\cat2.jpg", img)。
第一个参数指定保存路径及文件名,第二个参数为图像矩阵。imwrite()函数还包含一个可选的第三个参数,具体如下:
具体调用示例为cv2.imwrite("D:\\cat2.jpg", img,[int(cv2.IMWRITE_JPEG_QUALITY), 5])。
第三个参数针对特定格式:对于JPEG格式,它表示图像质量,取值范围为0-100的整数,默认值为95。需要注意的是,cv2.IMWRITE_JPEG_QUALITY的类型为Long,必须转换为int类型。以下是以不同质量存储的两幅图像对比:

对于PNG格式,第三个参数表示压缩级别,对应cv2.IMWRITE_PNG_COMPRESSION,取值范围0到9,压缩级别越高,图像文件尺寸越小,默认级别为3:
cv2.imwrite("./cat.png", img, [int(cv2.IMWRITE_PNG_COMPRESSION), 0])
cv2.imwrite("./cat2.png", img, [int(cv2.IMWRITE_PNG_COMPRESSION), 9])
保存后的图像尺寸对比如下:

此外还有一种支持的图像格式,但日常使用较少。
完整的图像处理代码如下:
import cv2
import numpy as np
img = cv2.imread("./cat.jpg")
emptyImage = np.zeros(img.shape, np.uint8)
emptyImage2 = img.copy()
emptyImage3=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
#emptyImage3[...]=0
cv2.imshow("EmptyImage", emptyImage)
cv2.imshow("Image", img)
cv2.imshow("EmptyImage2", emptyImage2)
cv2.imshow("EmptyImage3", emptyImage3)
cv2.imwrite("./cat2.jpg", img, [int(cv2.IMWRITE_JPEG_QUALITY), 5])
cv2.imwrite("./cat3.jpg", img, [int(cv2.IMWRITE_JPEG_QUALITY), 100])
cv2.imwrite("./cat.png", img, [int(cv2.IMWRITE_PNG_COMPRESSION), 0])
cv2.imwrite("./cat2.png", img, [int(cv2.IMWRITE_PNG_COMPRESSION), 9])
cv2.waitKey (0)
cv2.destroyAllWindows()
以上关于Python中cv2模块进行图像载入、显示和保存的实例分享完毕,希望能为读者提供参考,并欢迎大家继续支持本站。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













