如何使用OpenCV选择性地应用扩张?

时间:2014-07-05 13:30:11

标签: opencv image-processing

实际上,我想在下面的二进制图像上为“白色”像素设置五个外部边界框。所需区域以红色突出显示。

要获得第5个边框,我会扩大或模糊它。然而,扩张将区域3与区域1和2合并,因此我将得到一个几乎覆盖整个图像的边界框。 (如果我没有扩张或模糊它,那么cv::findContours + cv::boundingRect将产生大量的小矩形。)

换句话说,我只想要“足够大”的边界框。

Binary image

这只是一个示例模式。区域的位置可能会有所不同。有没有办法以一般方式解决问题?

1 个答案:

答案 0 :(得分:1)

扩散是按像素进行的,不考虑像素所属组件的大小。

如果您只想将扩张应用于小斑点,那么在应用扩张之前需要移除大斑点。

因此,使用findContours提取所有轮廓,然后将所有“足够大”的轮廓存储在列表中,并在源图像中将它们涂成黑色。然后扩张修改后的源并提取剩余的轮廓。

请注意,要获得boundingBox的正确大小,您可能想要的是morphological closing(扩张后是相同的侵蚀量),而不是仅扩张。