【问题标题】:How to count red and yellow polygons on an image in python?如何在python中计算图像上的红色和黄色多边形?
【发布时间】:2019-08-13 15:09:03
【问题描述】:

我有一些图像,其中一些元素用红色或黄色框起来。盒子通常是一个多边形。

目标是计算红色和黄色元素的数量。

我该如何计算?

我曾尝试应用一个得到红色或黄色的蒙版,但效果相对较差。但我不知道以后如何进行计数。

mask_example

【问题讨论】:

  • 没有任何代码,别人根本不可能帮你。能否提供一些示例代码!

标签: python image colors detection


【解决方案1】:

您可能会看到如下步骤:

  • 第 1 步 - 区分红色和黄色
  • 第 2 步 - 屏蔽红色并执行剩余步骤,然后屏蔽黄色并执行剩余步骤
  • 第 3 步 - 填充形状轮廓以使其完整且连续
  • 第 4 步 - 找到形状的轮廓并计算它们

每个步骤都有很多方法,我没有全部尝试过。正如我给它们编号的那样,其他人可能希望提出改进任何步骤的建议。


因此,对于第 1 步,您可以通过计算新图像中的每个像素来区分红色和黄色:

new = (Red - Green)/(Red + Green + 1)

+1 只是停止除以零。我实际上是用像这样的 ImageMagick 做到的,但你可以用 PIL/Pillow + Numpy 或 OpenCV 做到这一点:

convert boxes.png -fx "(u.r-u.g)/(u.r+u.g+1)" -auto-level result1.png

希望您能看到这会使黄色像素变暗而红色像素变亮。

这将为您提供一个阈值,您可以使用该阈值分别打开和关闭每种颜色。顺便说一下,Lab 色彩空间中的a 通道也是一个合理的判别式。


步骤 2 只是一个阈值和掩码操作,因为我们可以从步骤 1 中看到分离阈值。


第 3 步意味着填写方框。你可以用 "morphology" 来做到这一点,所以我可以用像这样的水平 15x1 像素结构元素来关闭白色水平线中的间隙:

convert result1.png -threshold 50%  -morphology close rectangle:15x1  result2.png

然后使用垂直的 1x15 结构元素,如下所示:

convert result1.png -threshold 50%  -morphology close rectangle:15x1 -morphology close rectangle:1x15 result2.png

为了得到这个,你可以看到所有的缝隙都被关闭了,轮廓是完整的:

OpenCVscikit-image 都具有可用于此目的的形态学函数。


第 4 步 - 您现在可以使用 OpenCV 的 findContours() 来计算 blob 并获取它们的特征。

【讨论】:

  • 感谢您的回答。我没有在我的问题中指定一件事。事实上,我可能有矩形以外的其他形式。这意味着我的表格通常是多边形。
猜你喜欢
  • 1970-01-01
  • 2011-10-28
  • 1970-01-01
  • 2019-06-01
  • 1970-01-01
  • 2017-09-12
  • 1970-01-01
  • 2014-02-23
  • 2017-10-22
相关资源
最近更新 更多