Python OpenCV图像基础:读取、显示与保存完整指南

键盘旁的猫
键盘旁的猫
发布时间:2026-10-13 | 3人浏览过
原创

本文基于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模块进行图像载入、显示和保存的实例分享完毕,希望能为读者提供参考,并欢迎大家继续支持本站。

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表