目录
2.2.3 destroyAllWindows()方法销毁所有窗口
1.初步认识OpenCV
1.1OpenCv概述
OpenCV(Open Source Computer Vision Library)是一个基于开源发行的跨平台计算机视觉库,由英特尔公司研发。OpenCV使用C++语言编写,但也提供了Python、Java和MATLAB等语言的接口,这使其在各种编程语言中都能得到广泛应用。同时,OpenCV支持Windows、Linux、Android和Mac OS等多个操作系统,具有良好的跨平台性能。
OpenCV的主要功能包括图像处理和计算机视觉。图像处理主要关注于对图像的处理操作,如增强、还原、去噪、分割等。而计算机视觉则更侧重于使用计算机来模拟人的视觉,这是计算机视觉领域的最终目标。OpenCV实现了图像处理和计算机视觉方面的很多通用算法,因此已成为计算机视觉领域最有力的研究工具。
1.2OpenCV模块
OpenCV模块是指OpenCV库中的各个功能组件或子库,这些模块提供了丰富的计算机视觉和图像处理功能。以下是一些常见的OpenCV模块及其功能概述:
Core模块:这是OpenCV的基础模块,包含了一些基本的数据结构和函数,如图像矩阵(cv::Mat)、动态数据结构、绘图函数、数学函数等。
Imgproc模块:这个模块包含了大多数图像处理功能,如滤波、色彩空间转换、直方图、特征检测、图像变换等。
Video模块:这个模块包含了一些视频分析功能,如光流法、背景/前景分割、摄像头标定、视频稳定等。
Features2d模块:这个模块主要用于特征检测和描述,如SIFT、SURF、ORB等算法,以及特征匹配和几何变换等。
HighGui模块:这个模块提供了用户界面功能,如窗口显示、鼠标事件处理、图像保存和加载等。
VideoIO模块:这个模块负责视频的读取和写入,支持多种视频文件格式。
Calib3d模块:这个模块主要用于相机标定、三维重建和立体视觉等功能。
Objdetect模块:这个模块包含了一些目标检测算法,如人脸检测、行人检测、文本检测等。
2.安装OpenCY
pip install opencv-contrib-python -i https://pypi.tuna.tsinghua.edu.cn/simple/
3.图像处理的基本操作
3.1 imread()方法读取图像
image = cv2.imread(filename, flags)
filename
:要读取的图像文件的名称,包括路径和扩展名。
flags
:这是一个可选参数,用于指定读取图像的方式。常用的标志有:
cv2.IMREAD_COLOR
:以彩色图像模式读取图片(默认值,等价于flags=1
)。cv2.IMREAD_GRAYSCALE
:以灰度模式读取图片(等价于flags=0
)。cv2.IMREAD_UNCHANGED
:包括 alpha 通道(等价于flags=-1
)。
3.2 显示图像
3.2.1 imshow()方法显示图像
cv2.imshow(winname, mat)
winname
是窗口名称,mat
是要显示的图像。这个函数没有返回值,但它会在指定的窗口中显示图像。
3.2.2 waitKey()方法设置按键事件
主要作用是等待用户按下某个键,并返回该按键的 ASCII 码值。这个函数在图像处理的过程中经常被用来实现按键控制,例如通过按下特定的键(如 Esc 键)来退出程序
3.2.3 destroyAllWindows()方法销毁所有窗口
示例:
import cv2
# 读取图像
image = cv2.imread('path_to_image.jpg')
# 显示图像
cv2.imshow('Image', image)
# 等待用户按键
cv2.waitKey(0)
# 关闭所有窗口
cv2.destroyAllWindows()
3.3 imwrite保存图像
cv2.imwrite(filename, img, [params])
filename
:要写入的文件的名称,包括路径和文件扩展名。img
:要保存的图像,通常是一个NumPy数组。params
:一个可选参数,用于指定图像编码的参数。在大多数情况下,可以省略这个参数。imwrite
函数返回一个布尔值,如果图像成功写入文件,则返回True
;如果写入失败,则返回False
。
示例:
import cv2
# 读取图像
image = cv2.imread('input.jpg')
# 对图像进行一些处理...
# 例如,我们可以将图像转换为灰度
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 将处理后的图像写入新的文件
cv2.imwrite('output.jpg', gray_image)
首先使用cv2.imread
函数读取一个名为input.jpg
的图像文件。然后,我们使用cv2.cvtColor
函数将图像转换为灰度图像。最后,我们使用cv2.imwrite
函数将处理后的灰度图像写入到名为output.jpg
的新文件中。
3.4 获取图像属性
3.4.1 shape属性获取图像的形状
示例:
import cv2
# 读取彩色图像
color_image = cv2.imread('color_image.jpg')
print("彩色图像的形状:", color_image.shape) # 输出: (高度, 宽度, 通道数)
# 读取灰度图像
gray_image = cv2.imread('gray_image.jpg', cv2.IMREAD_GRAYSCALE)
print("灰度图像的形状:", gray_image.shape) # 输出: (高度, 宽度)
3.4.2 size属性获取图像的大小
示例:
print("彩色图像的大小:", color_image.size) # 输出: 高度 * 宽度 * 通道数
print("灰度图像的大小:", gray_image.size) # 输出: 高度 * 宽度
3.4.3 dtype属性获取图像的大小
示例:
print("彩色图像的数据类型:", color_image.dtype) # 输出: uint8
print("灰度图像的数据类型:", gray_image.dtype) # 输出: uint8