opencv - 如何使用 OpenCV 有选择地应用膨胀?

标签 opencv image-processing

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

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

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

Binary image

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

最佳答案

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

如果您只想对小 Blob 应用膨胀,那么您需要在应用膨胀之前移除大 Blob 。

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

请注意,要获得正确的边界框大小,您可能想要的是 morphological closing (膨胀之后是相同量的腐 eclipse ),而不是仅膨胀。

关于opencv - 如何使用 OpenCV 有选择地应用膨胀?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24586923/

相关文章:

c++ - opencv中的偏斜检测和减少

python - 使用 Python 和 OpenCV 在图像中查找红色

python - Python中的openCV光流

arrays - 为什么像素值保持不变?

php - 人脸检测和图像组合

android - 通过图像处理确定球是否在球门内

opencv - 人手手指检测

opencv - 如何细化或模糊或平滑边缘?

opencv - 基本立体 block 匹配的不良结果(没有 OpenCV)

c++ - 如何将特定大小的字符复制到另一个图像中与原始图像中相同的位置?