OpenCV-Python 框架

  • 特别鸣谢:CodecWang 提供的cv教程 https://github.com/CodecWang/opencv-python-tutorial

  • 读图

    • imread() 是基本读图函数,其有两个参数

      • filename:给出图片的绝对路径或者相对路径
      • flags:指定读取图像的方式,可以为 cv2.IMREAD_COLOR 彩色图 (1), cv2.IMREAD_GRAYSCALE 灰度图 (0), cv2.IMREAD_UNCHANGED 包含透明通道的彩色图 (-1)
    • imshow() 是显示读入图片,有两个参数

      • window_name:窗口的名称
      • img:上文读入图片的变量
      • 窗口尺寸是自动给定的
    • waitKey() 是让窗口等待响应,0 是无限长等待,非零是等待该长度的 ms

    • imwrite() 两个参数

      • 第一个是输出路径,包括对象名及其后缀
      • 第二个是图片变量
    • cvtColor() 两个参数

      • frame:图片对象变量
      • tar_color:目标颜色,常见的有 灰度图 cv.COLOR_BGR2GRAY
  • 按键响应

    • if cv2.waitKey(1) == ord(‘q’): 表示响应 q 键执行操作
    • 这个同时具有限制帧频 1000 Hz
  • 打开摄像头

    • VideoCapture() 打开对应编号的摄像头

      • 我们令变量 capture = cv.VideoCapture(0)
    • ret, frame = capture.read() 返回两个参数

      • ret 第一个参数表示返回状态,如果状态为 1 则表示成功
      • frame 第二个参数表示读图的数据
    • 我们如果对一个打开摄像头之后的函数执行 while 那么我们得到的就是一个实时的视频了

    • capture.get() 是获得摄像头的几个参数,常见的如下

      • cv2.CAP_PROP_POS_FRAMES:获取视频文件中的当前帧索引
      • cv2.CAP_PROP_FRAME_WIDTH:获取帧的宽度 (HEIGHT 就是高度)
      • cv2.CAP_PROP_BRIGHTNESS:获取图像的亮度
      • cv2.CAP_PROP_CONTRAST:获取图像的对比度 等等
    • capture.set() 可以设置对应的参数

      • 第一个参数就是对应的参数编号(或者用上面的枚举也可以)
      • 第二个参数就是具体值
  • 图像处理

    • px = img[100,90] 中 px 获得的是坐标 [100,90] 的像素值,如果为彩色图像,结果为 BGR 三个色道的值;灰度图为 一个数字; 如果获取函数为 px = img[100,90,0] 则表示只获取其中的蓝色色道值,其他不考虑
    • 修改像素的方式就是 img[a,b,c] = [255,255,255] 之类的
    • img.shape 返回图片的长宽和通道数 (3个参数)
    • img.dtype 返回图片数据类型 (uint8)
    • img.size 返回图片的内存占有,即shape 返回参数的积 (.bmp 的内存算法)
    • 图像截取 (ROI)face = img[100:200, 115:188] 表示竖直 (100,200) 水平(115,188)
  • 颜色处理

    • HSV: H 表示色调,范围 [0,179]; S 表示饱和度,范围 [0,255]; 明度 V,范围 [0,255]

    • 我们可以将彩色的图片转换为HSV 计量,通过 COLOR_BGR2HSV

    • mask = cv2.inRange(src, lower_bound, upper_bound) 两个 bound 都是 numpy 数组,只有在两个之间的像素才会提取

    • 分割:将颜色渐变的图像变成分明的分割

      • ret, threshold_image = cv2.threshold(src, thresh, maxval, type) 的参数有四个

        • src 输入图像,一般是灰度图

        • thresh:是用于进行阈值化的阈值。图像中的像素值高于阈值的将被设为 maxval,低于阈值的将被设为0。

        • maxval:是当像素值高于阈值时设置的值,通常为255。

        • type:是阈值化的类型,决定了阈值化的方式。常用的类型有:

          • cv2.THRESH_BINARY:二进制阈值化。超过阈值的像素值设为 maxval,低于阈值的像素值设为0。
          • cv2.THRESH_BINARY_INV:反二进制阈值化。超过阈值的像素值设为0,低于阈值的像素值设为 maxval。
          • cv2.THRESH_TRUNC:截断阈值化。超过阈值的像素值设为阈值,低于阈值的像素值保持不变。
          • cv2.THRESH_TOZERO:被阈值截断为0。低于阈值的像素值设为0,高于阈值的像素值保持不变。
          • cv2.THRESH_TOZERO_INV:反被阈值截断为0。高于阈值的像素值设为0,低于阈值的像素值保持不变。
      • 自适应阈值:图片会寻找合理的部分进行阈值处理 threshold_image = cv2.adaptiveThreshold(src, maxValue, adaptiveMethod, thresholdType, blockSize, C) 需要 5 个参数

        • 前两者同上

        • adaptiveMethod 有两个取值可能

          • cv2.ADAPTIVE_THRESH_MEAN_C:基于均值的自适应阈值。
          • cv2.ADAPTIVE_THRESH_GAUSSIAN_C:基于高斯加权值的自适应阈值。
        • 阈值类型只能选二进制和反二进制两种

        • blockSize 是计算阈值局部区域大小,是一个奇数

        • C:是从计算的均值或高斯加权平均值中减去的常数。通常为正数。

  • 图像几何功能

  • 人脸识别功能