第一章:OpenCV入门

第一章:OpenCV入门

OpenCV是一个开源的计算机视觉库,1999年有英特尔的Gary Bradski启动。OpenCV库由C和C++语言编写,涵盖计算机视觉各个领域内的500多个函数,可以在多个操作系统上运行。它旨在提供一个简洁而又高效的接口,从而帮助共夺得开发人员快速的构建视觉系统。

本章主要介绍OpenCV的简单使用

图像处理的基本操作:

图像处理的最基本操作包括:

  • 读取图像
  • 显示图像
  • 保存图像

1. 读取图像:

在OpenCV中使用cv2.imread()函数来读取图像,该函数支持各种静态图像格式。

语法为:retval = cv2.imread( filename[, flags] )

  • retval:返回值,读取到的图像。如果未读取到图像,则返回 None
  • filename:表示要读取的图像的完整路径。
  • flags:是读取标记。该标记用来控制读取文件的类型,具体如下表表示。
    注意:表中第一列参数和第三列参数是等价的。即:cv2.IMREAD_UNCHANGED = -1
含义 数值
cv2.IMREAD_UNCHANGED 保持原格式不变 -1
cv2.IMREAD_GRAYSCALE 将图像调整为单通道灰度图像 0
cv2.IMREAD_COLOR 将图像调整为3通道的BGR图像。该值是默认值 1
cv2.IMREAD_ANYDEPTH 当载入的图像深度为16位或者32位时,就返回其对应深度的图像;否则,将其转换为8位图像 2
cv2.IMREAD_ANYCOLOR 以任何可能的颜色格式读取图像 4
cv2.IMREAD_LOAD_GDAL 使用gdal驱动程序加载图像 8
cv2.IMREAD_REDUCED_GRAYSCALE_2 将图像转化为单通道灰度图像,并将图像尺寸减小1/2
cv2.IMREAD_REDUCED_COLOR_2 将图像转换为3通道BGR彩色图像,并将图像尺寸减小1/2
cv2.IMREAD_REDUCED_GRAYSCALE_4 将图像转化为单通道灰度图像,并将图像尺寸减小1/4
cv2.IMREAD_REDUCED_COLOR_4 将图像转换为3通道BGR彩色图像,并将图像尺寸减小1/4
cv2.IMREAD_REDUCED_GRAYSCALE_8 将图像转化为单通道灰度图像,并将图像尺寸减小1/8
cv2.IMREAD_REDUCED_COLOR_8 将图像转换为3通道BGR彩色图像,并将图像尺寸减小1/8
cv2.IMREAD_IGNORE_ORIENTATION 不以EXIF的方向为标记旋转图像

函数cv2.imread()支持读取多种不同类型的图像:

在这里插入图片描述

例如:使用cv2.imread()函数读取图像

import cv2
lena = cv2.imread("sky.png")
print(lena)

2. 显示图像:

在OpenCV中提供了多个与显示相关的函数:

  • namedWidow函数:

  • 用来创建指定名称的窗口

  • 语法格式:None = cv2.namedWindow( winname ) 式中 winname 指的是创建窗口的名称
    例如创建一个名字为lesson的窗口

    CV2.namedWindow("lesson")
    
  • imshow函数:

    • 用来显示图像
    • 语法格式:None = cv2.imshow( winname, mat ) 式中winname为窗口名称,mat为要显示的图像。

    例如:

    import cv2
    lena = cv2.imread("lena.bmp")
    cv2.namedWindow("lesson")
    cv2.imshow("lesson", lena)
    

    上述代码中,首先通过cv2.imread()函数读取图像lena.bmp,然后通过cv2.namedWindow()函数创建了一个名为lesson的窗口,最后通过cv2.imshow()函数在lesson窗口中显示图像lena.bmp。

    注意:在实际使用中也可以不创建窗口,直接使用函数cv2.imshow()引用一个并不存在的创空,并在其中显示指定的图像,如:

    import cv2
    lena = cv2.imread("lena.bmp")
    cv2.imshow("demo", lena)
    
  • waitKey函数:

    • 用来等待按键,当用户按下键盘后,该语句会被执行,并返回一个值
    • 语法:retval = cv2.waitKey([delay])
      • retval:表示返回值。如果没有按键被按下,则返回-1;如果有按键备案下则返回该按键的ASCII码
      • delay:表示等待键盘触发的时间,单位是ms。当该值为负数或者0时,表示无限等待。默认为0

    实际使用中,可以通过函数cv2.waitKey()获取按下的按键,并针对不同的键做出不同的反应从而实现交互功能

    import cv2
    lenam = cv2.imread("lena.png")
    cv2.imshow("demo", lena)
    key = cv2.waitKey()
    if key == ord("A"):
        CV2.imshow("PressA", lena)
    elif key == ord("B"):
    	cv2.imshow("PressB", lena)
    
  • destroyWindow函数:

    • 用来释放(销毁)指定窗口
    • 语法:None = cv2.destroyWindow( winname ) winname为窗口名字
    import cv2
    lena = cv2.imread("lena.png")
    cv2.imshow("demo", lena)
    cv2.waitKey()
    cv2.destroyWindow("demo")
    
  • destroyAllWindows函数

    • 用来释放(销毁)所有窗口
    • 语法:None = cv2.destroyAllWindows()
    import cv2
    lena = cv2.imread("lena.png")
    cv2.imshow("demo1", lena)
    cv2.imshow("demo2", lena)
    cv2.waitKey()
    cv2.destroyAllWindows()
    

3. 保存图像

在OpenCV中使用函数cv2.imwrite()来保存图像,该函数的语法是:

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

参数:

  • retval:返回值。如果保存成功,则返回True;如果失败,则返回False
  • filename:要保存目标文件的完整路径。
  • img:要保存的图像
  • params:保存类型参数,可选。
import cv2
lena = cv2.imread("lena.png")
r = cv2.imwrite("result.png", lena)

OpenCV贡献库介绍

目前,OpenCV库包含如下两部分:

  • OpenCV主库:即通常安装的OpenCV库,该库成熟稳定,有核心的OpenCV团队维护
  • OpenCV贡献库:该扩展库的名称为opencv_contrib,主要有社区开发和维护,其包含的视觉应用比OpenCV主库更全面。需要注意的是,OpenCV贡献库中包含非OpenCV许可的部分,并且包含专利保护的算法。因此使用该模块前需要特别注意。
  • OpenCV贡献库中包含非常多的扩展模块:
    • bioinspired:生物视觉模块
    • datasets:数据集读取模块
    • dnn:深度神经网络模块
    • face:人脸识别模块
    • matlab:MATLAB接口模块
    • stereo:双目立体匹配模块
    • text:视觉文本匹配模块
    • tracking:基于视觉的目标跟踪模块
    • ximgpro:图像处理扩展模块
    • xobjdetect:增强2D目标检测模块
    • datasets:数据集读取模块
    • dnn:深度神经网络模块
    • face:人脸识别模块
    • matlab:MATLAB接口模块
    • stereo:双目立体匹配模块
    • text:视觉文本匹配模块
    • tracking:基于视觉的目标跟踪模块
    • ximgpro:图像处理扩展模块
    • xobjdetect:增强2D目标检测模块
    • xphoto:计算 摄影扩展模块

猜你喜欢

转载自blog.csdn.net/weixin_57440207/article/details/120619952