【发布时间】:2015-08-19 18:42:56
【问题描述】:
(这只是更大图像的子图像,但只有这部分对我来说很重要)。我需要算法来查找图像中的所有这些黄色对象,并从中找到包含最多黄色点的对象。这只是数千张类似图片中的一张,或多或少有这些黄色物体。这样做的方法是什么?我发现扫描线算法对此很有用,但我还没有找到一些对我有帮助的例子。如果您有一些想法甚至算法,那将是完美的。这些颜色线并不重要,我只是把它们作为一些我需要在其中找到黄色对象的边框。
非常感谢您的回答
【问题讨论】:
(这只是更大图像的子图像,但只有这部分对我来说很重要)。我需要算法来查找图像中的所有这些黄色对象,并从中找到包含最多黄色点的对象。这只是数千张类似图片中的一张,或多或少有这些黄色物体。这样做的方法是什么?我发现扫描线算法对此很有用,但我还没有找到一些对我有帮助的例子。如果您有一些想法甚至算法,那将是完美的。这些颜色线并不重要,我只是把它们作为一些我需要在其中找到黄色对象的边框。
非常感谢您的回答
【问题讨论】:
有两个基本步骤:
阈值:生成黄色和非黄色像素数组。如果您正在使用的图像都像您提供的示例,这应该很容易,但是如果您必须处理不同的阴影和色调,请尝试自适应阈值。存储,例如,黄色像素的值为 -1,其他任何地方为 0。
分割: 将 ID 值初始化为 1。扫描阈值图像的每个像素。当您遇到值为 -1 的像素(即黄色像素)时,使用flood fill 例程将 ID 值写入该像素以及与其连接的所有黄色像素。在洪水填充例程退出之前,您可以将其找到的像素数以及平均 X 和 Y 坐标等信息存储在由 ID 值索引的数组中。然后增加 ID 值并继续扫描,直到覆盖整个图像。
然后搜索洪水填充例程生成的数据,找出最大的黄色区域以及它们的位置。
【讨论】:
看起来 OpenCV 有斑点检测选项。我发现这篇文章展示了如何使用灰度值检测斑点,您应该能够更改它以使用目标颜色的颜色值。它还提到使用 blob 的区域作为阈值,因此您应该能够使用它来找到图像中最大的区域。
http://www.learnopencv.com/blob-detection-using-opencv-python-c/
【讨论】:
一种方法是生成图像的四叉树。使用这个四叉树,很容易找到形成斑点(甚至有孔)的连接片段并计算它们的大小。
【讨论】: