OpenCV 4.11.0
开源计算机视觉
加载中…
搜索中…
无匹配项
击中或错过

上一篇教程: 更多形态学变换
下一篇教程: 使用形态学运算提取水平和垂直线

原作者Lorena García
兼容性OpenCV >= 3.0

目标

在本教程中,您将学习如何使用击中或错过变换(也称为击中和错过变换)在二值图像中查找给定的配置或模式。此变换也是更高级形态学运算(如细化或修剪)的基础。

我们将使用 OpenCV 函数 morphologyEx()

击中或错过理论

形态学运算基于图像的形状处理图像。这些运算符将一个或多个结构元素应用于输入图像以获得输出图像。两种基本的形态学运算分别是腐蚀膨胀。这两种运算的组合会生成高级形态学变换,例如开运算闭运算顶帽变换。要了解有关这些和其他基本形态学运算的更多信息,请参阅之前的教程(腐蚀和膨胀)和(更多形态学变换)。

击中或错过变换可用于查找二值图像中的模式。特别是,它查找其邻域与第一个结构元素\(B_1\)的形状匹配,而同时不与第二个结构元素\(B_2\)的形状匹配的那些像素。数学上,应用于图像\(A\)的运算可以表示如下

\[ A\circledast B = (A\ominus B_1) \cap (A^c\ominus B_2) \]

因此,击中或错过运算包括三个步骤

  1. 使用结构元素\(B_1\)腐蚀图像\(A\)。
  2. 使用结构元素\(B_2\)腐蚀图像\(A\)的补集(\(A^c\))。
  3. 将步骤 1 和步骤 2 的结果进行与运算。

结构元素\(B_1\)和\(B_2\)可以组合成单个元素\(B\)。让我们来看一个例子:

在这种情况下,我们正在寻找一种模式,其中中心像素属于背景,而北、南、东和西像素属于前景。邻域中的其余像素可以是任何类型,我们不关心它们。现在,让我们将此内核应用于输入图像

您可以看到该模式仅在图像中的一个位置被找到。

代码

下面显示了与前面示例对应的代码。

如您所见,它就像使用带有操作类型MORPH_HITMISS和所选内核的morphologyEx()函数一样简单。

其他示例

在这里您可以找到将不同的内核应用于之前使用的相同输入图像的输出结果

现在尝试您自己的模式!