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

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

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

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



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

最佳答案

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

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

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

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

https://stackoverflow.com/questions/24586923/

相关文章:

android - 在Android应用程序开发中将OpenCV与NDK结合使用

opencv - OSX 10.9上的Macports-使用libstdc++编译opencv

python - Django、Docker、Python - 无法在 python-alpine

opencv - channel 数-Matlab vs Opencv

python-2.7 - 我的opencv python程序显示看似期望的短语,但既不终止也不允许进

python - 如何在 Python 中为 OpenCV minMaxLoc 函数创建掩码矩阵变量

opencv - opencv c++ HSV图像 channel 分离异常

android - imread在Android的OpenCV中不起作用

android - 如何使用MediaCodec编码器获取RGB颜色格式的帧

docker - 如何将VM镜像转换为dockerfile?