使用OpenCV检测图像中的白色像素簇 [英] Detecting clusters of white pixels in an image using openCV

查看:20
本文介绍了使用OpenCV检测图像中的白色像素簇的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

输入图像:

预期产量:

我打算拟合三个(或一些数量的)多边形(在本例中是矩形),以表示此图像中的"大"白色斑点。在输出图像中绘制的矩形是根据我对白色区域的感知。我不指望算法会得出这些相同的边界区域。我希望的是在白色像素群周围放置一些紧密的多边形。

我最初的解决方案是找到该图像的轮廓,并通过找到每个轮廓中点的凸壳,在每个轮廓周围拟合一个闭合的凸多边形。

但是,由于白色区域高度碎片化,内部是黑色区域,边缘是隆起的,所以cv2.findContour返回的轮廓数量非常高(大约500个左右)。因此,拟合凸面不会改善白色区域的形状。白色区域大多保留了它们原来的抽象形状。我的目标是将白色区域的许多小轮廓合并成一个完整的包含轮廓的轮廓,然后我可以在该轮廓上拟合一个凸壳。

如何解决此问题?我最初是否应该对轮廓点使用聚类算法来查找彼此接近的等高线?

推荐答案

您首先需要对该图像进行形态闭合(即先膨胀后侵蚀)。这样可以在保持各个组件的形状和大小的同时,关闭您的图像中的所有微小"洞"。与之相反,当腐蚀之后是膨胀时,它会去除图像中的噪声点。我正在制作一个类似的图像,我必须进行多达10次的扩张+侵蚀才能使我的部件均匀。完成后,使用连接的组件或查找等高线。这肯定会将等值线计数从400降至20-30。

其次,您提到您需要3个集群。尽管这两个小星团(被红线覆盖)本可以合并为一个。我从中得出的结论是,您希望每个簇都尽可能紧密地适合其边界矩形。因此,我建议您设置一个阈值效率(比如80%),并使用层次聚类将每个连接的组件合并到一个集群中。如果您的白色像素占用的空间不到其边界矩形(集群的)的80%,您将停止集群并获得集群。

这篇关于使用OpenCV检测图像中的白色像素簇的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆