如何使用OpenCV选择性地应用膨胀?

如何使用OpenCV选择性地应用膨胀?,opencv,image-processing,Opencv,Image Processing,实际上,我想在下面的二值图像上为“白色”像素设置五个外部边界框。所需区域以红色高亮显示 为了得到第五个边界框,我会放大或模糊它。然而,膨胀会将区域3与区域1和2合并,所以我会得到一个几乎覆盖整个图像的边界框。(如果我不放大或模糊它,那么+将生成大量小矩形。) 换句话说,我只想要“足够大”的边界框 这只是一个样本模式。分区的位置可能会有所不同。有没有一种方法可以用一般的方法来解决这个问题?膨胀是在每个像素的基础上进行的,而不考虑像素所属组件的大小 如果只想对小斑点应用膨胀,则需要在应用膨胀之前移

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

为了得到第五个边界框,我会放大或模糊它。然而,膨胀会将区域3与区域1和2合并,所以我会得到一个几乎覆盖整个图像的边界框。(如果我不放大或模糊它,那么+将生成大量小矩形。)

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


这只是一个样本模式。分区的位置可能会有所不同。有没有一种方法可以用一般的方法来解决这个问题?

膨胀是在每个像素的基础上进行的,而不考虑像素所属组件的大小

如果只想对小斑点应用膨胀,则需要在应用膨胀之前移除大斑点

因此,使用FindConteurs提取所有轮廓,然后将“足够大”的所有轮廓存储在列表中,并在源图像中将其绘制为黑色。然后放大修改后的源并提取剩余轮廓


请注意,要获得正确大小的边界框,您可能需要的是(膨胀后的侵蚀量相同),而不是仅膨胀。

愚蠢的我,这是显而易见的。我正在考虑一些现有的函数来检测小盒子,然后应用
cv::convxhull
。。。谢谢如果知道边界框5的位置,只需在该矩形上进行膨胀即可。但要找到它,你首先需要做扩张。对不起,我无法克服这个鸡和蛋的问题。也许如果有许多小轮廓彼此接近,你可以以某种方式合并它们。