我有一张图像,其中包含黑色背景上的白色簇。白色部分的簇没有连接在一起,但是我想在整个外壳周围而不是在每个簇周围绘制轮廓。图片已附上。
当我试图形成轮廓时,它会围绕单个集群进行。我能得到一些关于如何形成一个一般轮廓的提示、帮助或代码吗?
我有一张图像,其中包含黑色背景上的白色簇。白色部分的簇没有连接在一起,但是我想在整个外壳周围而不是在每个簇周围绘制轮廓。图片已附上。
当我试图形成轮廓时,它会围绕单个集群进行。我能得到一些关于如何形成一个一般轮廓的提示、帮助或代码吗?
opencv 凸包函数几乎完全符合您的要求。它“找到点集的凸包”。看:
我说“几乎”,因为你可能不想直接穿过左下角。
另一种方法是进行形态扩张,N 次,直到你只有一个连续的白色区域。您需要考虑如何有效地检查是否只剩下一个白色区域。然后腐蚀 N 次以恢复到与原始形状大致相同的东西(但只有一个连续的形状)。然后找到轮廓。如果您这样做,您需要将图像嵌入更大的黑色背景中,以便有空间进行膨胀。看:
您可以使用HoughLines
来查找图像中的线条。你 imgae 的外边缘应该是最长的线。
也许将其与 user2151446 的扩张理念结合起来以获得更好的结果。
也许,您可以尝试将图像分成许多小块,然后您可以计算每个块中有多少像素是白色的,如果像素数大于阈值,则将所有这些块像素设置为白色。那么也许你可以找到一个大致的轮廓。