0%

OpenCV 中的图像操作

滤波与平滑

详见 这篇文章

可以实现对图像的降噪处理、抹去小光斑等。

形态学操作

可以用来去除噪声、提取图像中的形状特征、填补区域或突出边界。

erode() - 腐蚀

  • 作用:腐蚀操作会侵蚀图像中的前景对象,使其变小。常用于去除小的白噪声、断开物体间的连接等。

  • 原理:腐蚀操作在一个卷积核(结构元素)下扫描图像,只有当卷积核完全覆盖前景时,中心像素才保留前景,否则变为背景。这使得前景物体的边界收缩。

  • 调用erode(src, dst, kernel, anchor, iterations, borderType, borderValue)

  • 参数

    • InputArray src: 输入图像(通常是二值图像)。
    • OutputArray dst: 输出图像
    • InputArray kernel: 结构元素,决定了腐蚀的形状与大小。
    • Point anchor: 锚点,表示要处理的像素位于核的什么位置。默认为 Point(-1,-1) 表示中心。
    • int iterations: 腐蚀的次数。默认为 1。
    • int borderType: 用于外推图像外部像素的边界模式。默认值为 BORDER_DEFAULT。(不支持 BORDER_WRAP )
    • const Scalar & borderValue: 仅在 borderTypeBORDER_CONSTANT 时使用,指定填充边界的具体常数值。

dilate() - 膨胀

  • 作用:膨胀操作是腐蚀的逆操作,用于扩展前景对象,使其变大。它可以填补对象内部的小孔洞,连接断开的对象等。
  • 实现原理:膨胀操作在卷积核下扫描图像,卷积核只要有一个元素覆盖前景像素,中心像素就会变为前景。这样前景物体的边界会向外扩展。
  • 调用dilate(src, dst, kernel, anchor, iterations, borderType, borderValue)
  • 参数:同 erode()

getStructuringElement() - 生成结构元素

  • 作用:生成一个特定形状的结构元素,通常用于形态学操作。

  • 调用getStructuringElement(shape, ksize, anchor)

  • 参数

    • int shape: 形状。可取MORPH_RECT(矩形)、MORPH_CROSS(十字)、MORPH_ELLIPSE(椭圆)。

    • Size kSize: 尺寸。

    • Point anchor: 锚点,表示要处理的像素位于核的什么位置。默认为 Point(-1,-1) 表示中心。

morphologyEx() - 形态学扩展操作

morphologyEx(src, dst, operation, element);

element: 结构元素,决定了操作区域的形状与大小。

operation 有以下取值:

  • 开运算(MORPH_OPEN

    • 作用:先腐蚀再膨胀,常用于去除噪声。
    • 实现原理:先应用腐蚀操作,消除细小噪点,然后再进行膨胀,恢复前景对象的原始大小。
  • 闭运算(MORPH_CLOSE

    • 作用:先膨胀再腐蚀,通常用于填补前景对象中的小孔洞或连接断开的区域。
    • 实现原理:先应用膨胀操作,填充小孔洞,再进行腐蚀,恢复对象的原始大小。
  • 形态学梯度(MORPH_GRADIENT

    • 作用:形态学梯度是膨胀与腐蚀之间的差异,用于提取图像的边缘。

    • 实现原理

      • 计算方法是对图像进行膨胀操作,然后减去腐蚀操作的结果。
      • 由于膨胀会扩展前景对象,腐蚀会缩小前景对象,二者之间的差异就形成了图像的边缘。
    • 公式Morphological Gradient = dilate(src) - erode(src)

    • 应用:通常用于检测图像中的边缘特征,尤其在二值图像中比较常见。

  • 顶帽操作(MORPH_TOPHAT)

    • 作用:顶帽操作用于提取图像中比其周围区域更亮的部分,常用于背景较均匀的图像中提取亮的细节。

    • 实现原理

      • 计算方法是原图像减去其开运算的结果。
      • 开运算(先腐蚀后膨胀)通常会去除较小的前景细节,保留大体结构。顶帽操作通过减去开运算的结果,可以将被去除的那些细节提取出来。
    • 公式Top Hat = src - open(src)

    • 应用:用于增强亮的细节,比如在背景较均匀的情况下提取文字或小亮点。

  • 黑帽操作(MORPH_BLACKHAT)

    • 作用:黑帽操作用于提取图像中比其周围区域更暗的部分,常用于背景较均匀的图像中提取暗的细节。
    • 实现原理
      • 计算方法是闭运算的结果减去原图像。
      • 闭运算(先膨胀后腐蚀)会填充前景中的小孔洞并连接断开的部分。黑帽操作通过从闭运算的结果中减去原图像,可以将原图像中被闭运算填充的暗区域提取出来。
    • 公式Black Hat = close(src) - src
    • 应用:用于增强暗的细节,比如在背景较均匀的情况下提取阴影或暗点。