【问题标题】:How to find yellow objects on given picture?如何在给定的图片上找到黄色物体?
【发布时间】:2015-08-19 18:42:56
【问题描述】:

我有这张照片:

(这只是更大图像的子图像,但只有这部分对我来说很重要)。我需要算法来查找图像中的所有这些黄色对象,并从中找到包含最多黄色点的对象。这只是数千张类似图片中的一张,或多或少有这些黄色物体。这样做的方法是什么?我发现扫描线算法对此很有用,但我还没有找到一些对我有帮助的例子。如果您有一些想法甚至算法,那将是完美的。这些颜色线并不重要,我只是把它们作为一些我需要在其中找到黄色对象的边框。

非常感谢您的回答

【问题讨论】:

    标签: algorithm computer-vision


    【解决方案1】:

    有两个基本步骤:

    • 阈值:生成黄色和非黄色像素数组。如果您正在使用的图像都像您提供的示例,这应该很容易,但是如果您必须处理不同的阴影和色调,请尝试自适应阈值。存储,例如,黄色像素的值为 -1,其他任何地方为 0。

    • 分割: 将 ID 值初始化为 1。扫描阈值图像的每个像素。当您遇到值为 -1 的像素(即黄色像素)时,使用flood fill 例程将 ID 值写入该像素以及与其连接的所有黄色像素。在洪水填充例程退出之前,您可以将其找到的像素数以及平均 X 和 Y 坐标等信息存储在由 ID 值索引的数组中。然后增加 ID 值并继续扫描,直到覆盖整个图像。

    然后搜索洪水填充例程生成的数据,找出最大的黄色区域以及它们的位置。

    Here's a program that does something quite similar with red objects instead of yellow ones, and then draws circles around them

    【讨论】:

      【解决方案2】:

      看起来 OpenCV 有斑点检测选项。我发现这篇文章展示了如何使用灰度值检测斑点,您应该能够更改它以使用目标颜色的颜色值。它还提到使用 blob 的区域作为阈值,因此您应该能够使用它来找到图像中最大的区域。

      http://www.learnopencv.com/blob-detection-using-opencv-python-c/

      【讨论】:

        【解决方案3】:

        一种方法是生成图像的四叉树。使用这个四叉树,很容易找到形成斑点(甚至有孔)的连接片段并计算它们的大小。

        【讨论】:

          猜你喜欢
          • 2011-02-21
          • 2014-03-19
          • 2023-02-03
          • 1970-01-01
          • 2016-10-29
          • 2017-04-06
          • 2013-12-15
          • 1970-01-01
          • 2022-06-11
          相关资源
          最近更新 更多