1 基本语法操作

1 读取图像

读取图像的如法如下

img = cv2.imread('图像地址'[,flags])

cv2暂不支持读取中文路径,所以务必确认地址中不含中文。
flags为选填项,可以设置读取图片时的处理方式:

  1. cv2.IMREAD_UNCHANGED:-1,读入图像并保持其透明度信息。
  2. cv2.IMREAD_GRAYSCALE:0,读入灰度图像。
  3. cv2.IMREAD_COLOR:1,读入彩色图像(默认值)。
  4. cv2.IMREAD_REDUCED_COLOR_2:2,读入图像,并将其转换为2倍缩小的颜色图像。
  5. cv2.IMREAD_REDUCED_GRAYSCALE_2:3,读入图像,并将其转换为2倍缩小的灰度图像。
    填写前面的字符或后面的数字代码具有同样的效果,即:
img = cv2.imread('图像地址', cv2.IMREAD_GRAYSCALE)
img = cv2.imread('图像地址', 0)

以上两行代码都可以读入灰色图像。
读取进图像后,图像数据将会以像素值列表的形式保存。

2 展示图象

首先,使用namedWindow可以建立一个窗口

cv2.namedWindow('窗口名称')

之后,在窗口中显示图像

cv2.imshow('窗口名称', 图像变量)

如果遇到不存在的窗口,也会根据名称自动建立该窗口,不会报错。

3 销毁窗口

如果窗口后续不再需要,可以手动关闭或者使用代码销毁。

cv2.destroyWindow('窗口名称')
cv2.destroyAllWindows( )

以上分别为销毁指定窗口和销毁全部窗口。
在实际项目中,该功能通常与按键操作联合使用。

img=cv2.imread('图像地址') 
cv2.imshow("demo", img ) 
cv2.waitKey() 
cv2.destroyWindow("demo")

在上面的代码中,waitkey函数用来等待按键,函数可传入的参数为delay值。这一函数的功能是,当产生按键后继续执行代码。虽然函数为保存函数的返回值,但该函数具有返回值,返回值为案件的ASCII码。
如果参数delay的值为一个正数,则在这段时间内,程序等待按下键盘按键。当有按下键盘按键的事件发生时,就继续执行后续程序语句;如果在delay参数所指定的时间内一直没有这样的事件发生,则超过等待时间后,继续执行后续的程序语句。

这段代码是实现了在按下任意按键后,摧毁demo窗口。

4 图像保存

OpenCV提供了函数cv2.imwrite(),用来保存图像,该函数的语法格式为:

retval = cv2.imwrite( filename, img[, params] )

尽管该函数的返回值并不常用,但确实有返回值。如果保存成功,则返回逻辑值真(True);如果保存不成功,则返回逻辑值假(False)。

2 OpenCV常用库

除了OpenCV主库之外,还具有一些贡献库作为OpenCV的扩展模块。该扩展库的名称为opencv_contrib,主要由社区开发和维护,其包含的视觉应用比OpenCV主库更全面。OpenCV贡献库中包含非OpenCV许可的部分,并且包含受专利保护的算法。因此,在使用该模块前需要特别注意。

以下是一些常用的OpenCV贡献库:

    1. objdetect:该库包含了许多目标检测算法,用于检测图像中的物体,例如人脸,眼睛,车辆等。它支持Haar级联分类器,深度学习网络等多种技术。
    2. imgproc:该库包含了许多图像处理算法,用于对图像进行预处理,例如缩放,旋转,阈值化等。它还包括许多图像滤波器,例如高斯滤波器,中值滤波器等。
    3. video:该库包含了许多视频处理算法,用于从视频中提取信息,例如跟踪物体,检测运动等。它支持视频编码和解码,以及视频文件的读写。
    4. calib3d:该库包含了许多相机标定和三维重建算法,用于计算相机的内部参数和外部参数,以及从二维图像重建三维环境。
    5. photo:该库包含了许多图像增强算法,用于改善图像质量,例如去噪,消除曝光不均等。它还包括图像合成和混合算法,用于将多张图像组合在一起。