OpenCV 4.11.0
开源计算机视觉库
加载中…
搜索中…
无匹配项
腐蚀和膨胀

上一教程: 图像平滑
下一教程: 更多形态学变换

原作者Ana Huamán
兼容性OpenCV >= 3.0

目标

在本教程中,您将学习如何

  • 应用两个非常常见的形态学算子:腐蚀和膨胀。为此,您将使用以下 OpenCV 函数
注意
以下解释来自 Bradski 和 Kaehler 编著的Learning OpenCV一书。

形态学操作

  • 简而言之:一组基于形状处理图像的操作。形态学操作将一个结构元素应用于输入图像并生成输出图像。
  • 最基本的形态学操作是:腐蚀和膨胀。它们具有广泛的用途,例如:
    • 去除噪声
    • 分离单个元素并连接图像中分散的元素。
    • 查找图像中的强度凸起或孔洞
  • 我们将简要解释膨胀和腐蚀,并使用下图作为示例

膨胀

  • 此操作包括使用某个内核(\(B\))对图像\(A\)进行卷积,该内核可以具有任何形状或大小,通常是正方形或圆形。
  • 内核\(B\)具有一个定义的锚点,通常是内核的中心。
  • 当内核\(B\)在图像上扫描时,我们计算\(B\)重叠的最大像素值,并用该最大值替换锚点位置的图像像素。正如您可以推断的那样,此最大化操作会导致图像中的明亮区域“增长”(因此称为膨胀)。
  • 膨胀操作为:\(\texttt{dst} (x,y) = \max _{(x',y'): \, \texttt{element} (x',y') \ne0 } \texttt{src} (x+x',y+y')\)
  • 以上图为例。应用膨胀后,我们可以得到
  • 字母的明亮区域在背景的黑色区域周围膨胀。

腐蚀

  • 此操作是膨胀的逆操作。它计算给定内核区域上的局部最小值。
  • 当内核\(B\)在图像上扫描时,我们计算\(B\)重叠的最小像素值,并用该最小值替换锚点下方的图像像素。
  • 腐蚀操作为:\(\texttt{dst} (x,y) = \min _{(x',y'): \, \texttt{element} (x',y') \ne0 } \texttt{src} (x+x',y+y')\)
  • 与膨胀示例类似,我们可以将腐蚀算子应用于原始图像(如上所示)。您可以在下面的结果中看到,图像的明亮区域变薄,而黑暗区域变大。

代码

解释

注意
此外,还有一些其他参数允许您一次执行多次腐蚀/膨胀(迭代),并设置边界类型和值。但是,在这个简单的教程中我们没有使用这些参数。您可以查看参考文档了解更多详细信息。

结果

编译上面的代码并使用图像作为参数执行它(如果使用python则运行脚本)。如果您没有提供图像作为参数,则将使用默认示例图像(LinuxLogo.jpg)。

例如,使用此图像

我们得到以下结果。自然地,改变Trackbar中的索引会产生不同的输出图像。试试看!您甚至可以尝试添加第三个Trackbar来控制迭代次数。

(取决于编程语言,输出可能略有不同,或者只有一个窗口)