OpenCV图像基础操作与算术操作

  • 图像的基础操作
    • 1、ROI
      • ROI(region of interest),感兴趣区域。机器视觉、图像处理中,从被处理的图像以方框、圆、椭圆、不规则多边形等方式勾勒出需要处理的区域,称为感兴趣区域,ROI。使用ROI圈定你想读的目标,可以减少处理时间,增加精度。
    • 2、获取图像属性
      • 图像的属性包括
        • 行,列,通道:img.shape
        • 图像数据类型: img.dtype
        • 像素数目:img .size
    • 3、拆分及合并图像通道
      • 拆分通道:b,g,r = cv2.split(img)
      • 合并通道:cv2.merge((b,g,r))
    • 4、图像填充边界
      • 创建一个类似相框的边界,这经常在卷积运算或者0填充时使用
      •  cv2.copyMakeBorder( src, top, bottom, left, right, borderType, value)
        • src :  输入图像
        • top, bottom, left, right:对应边界的像素数目
        • borderType: 添加哪种类型的边界
          • cv2.BORDER_CONSTANT 添加有????色的常数值边界,还需要添加下一个参数(value)。
          • cv2.BORDER_REFLECT 边界元素的镜像
          •  cv2.BORDER_WRAP
        • value:  边界颜色,类似(255,255,255)
      • 实例

        OpenCV图像基础操作与算术操作

        OpenCV图像基础操作与算术操作

  • 图像的算术操作
    • 1、图像加法: 图像加法,实际上就是矩阵的加法,即矩阵内不元素相加。

      OpenCV图像基础操作与算术操作

      OpenCV图像基础操作与算术操作

    • 2、图像混合:图像混合不同于图像相加,这种操作会给每幅图片一个权重,达到一种混合或者透明的效果。可以根据 g(x)=(1-¢)·f 1+ ¢·f2,即有dst = a·img1 + b·img2 +c, 一般c取0即可。
      •  cv2.addWeighted(img1,a,img2,b,c)

        OpenCV图像基础操作与算术操作

        OpenCV图像基础操作与算术操作

    • 3、按位操作,可以用来添加标签,logo之类的操作。
      • 一般的位操作有:AND,OR,NOT,XOR等。
      • 首先选取两张图,一张作为背景图,另外一张作为标签图。

        OpenCV图像基础操作与算术操作

      • 然后选取ROI区域。

        OpenCV图像基础操作与算术操作

      • 接下来就是图像二值化。
        • 其中用到了 cv2.threshold(src, thresh, maxval, type[, dst]) → retval, dst,其中几个参数需要注意下,
          • src:表示的是图片源,只能输入单通道图像,通常来说为灰度图
          • thresh:表示的是阈值(起始值)
          • maxval:表示的是最大值
          • type:表示的是这里划分的时候使用的是什么类型的算法,常用值为0(cv2.THRESH_BINARY)

            OpenCV图像基础操作与算术操作

        • cv2.bitwise_not(mask):将图片的像素取反,即0变为255,255变为0。
        • cv2.bitwise_and(roi, roi, mask=mask) 和 cv2.bitwise_and(img1, img1, mask=mask_inv)
          • roi/img1:图像矩阵1
          • roi/img1:图像矩阵2
          • mask:掩膜,默认选项
        • 下图即二值化操作。

          OpenCV图像基础操作与算术操作

      • 最后,将两组矩阵相加,得到结果如下。

        OpenCV图像基础操作与算术操作

        OpenCV图像基础操作与算术操作

  • 图像阀值
    • 简单阀值- cv2.threshhold(grayimg, thres, res-thres, flag)
      • 这个函数的第一个参数就是原图的灰度图。第二个参数就是用来对像素值分类的阀值。第三个参数就是当像素值高于(有时是小于)阀值时应给予的新的像素值。OpenCV提供了多种不同的阀值方法由第四个参数来决定的,一般包括cv2.THRESH_BINARY,cv2.THRESH_BINARY_INV, cv2.THRESH_TRUNC, cv2.THRESH_TOZERO, cv2.THRESH_TOZERO_INV
    • 自适应阀值
      • 使用是全局阀值时整幅图像用同一个数作为阀值。但是这种方法并不适应与所有情况,尤其是当同一幅图像上的不同部分的具有不同亮度时。这种情况下我们就需要用自适应阀值。此时的阀值是根据图像上的每一个小区域计算与其对应的阀值。因此在同一幅图像上的不同区域采用的是不同的阀值,从而使我们能在亮度不同的情况下得到更好的结果。这种情况下需要指定三个参数,返回一个结果。
        • cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY,11,2)
        • Adaptive Method- 指定计算阀值的方法。
          • cv2.ADPTIVE_THRESH_MEAN_C:阀值取自相邻区域的平均值
          • cv2.ADPTIVE_THRESH_GAUSSIAN_C:阀值取值相邻区域的加权和,权重为一个高斯窗口。
        • Block Size - 邻域大小(用来计算阀值的区域大小)。
        • C - 就是一个常数,阀值就等于平均值或者加权平均值减去这个常数。