实际上,我想在下面的二进制图像上为“白色”像素设置五个外部边界框。所需区域以红色突出显示。
要获得第5个边框,我会扩大或模糊它。然而,扩张将区域3与区域1和2合并,因此我将得到一个几乎覆盖整个图像的边界框。 (如果我没有扩张或模糊它,那么cv::findContours
+ cv::boundingRect
将产生大量的小矩形。)
换句话说,我只想要“足够大”的边界框。
这只是一个示例模式。区域的位置可能会有所不同。有没有办法以一般方式解决问题?
答案 0 :(得分:1)
扩散是按像素进行的,不考虑像素所属组件的大小。
如果您只想将扩张应用于小斑点,那么在应用扩张之前需要移除大斑点。
因此,使用findContours提取所有轮廓,然后将所有“足够大”的轮廓存储在列表中,并在源图像中将它们涂成黑色。然后扩张修改后的源并提取剩余的轮廓。
请注意,要获得boundingBox的正确大小,您可能想要的是morphological closing(扩张后是相同的侵蚀量),而不是仅扩张。