【发布时间】:2019-08-13 15:09:03
【问题描述】:
我有一些图像,其中一些元素用红色或黄色框起来。盒子通常是一个多边形。
目标是计算红色和黄色元素的数量。
我该如何计算?
我曾尝试应用一个得到红色或黄色的蒙版,但效果相对较差。但我不知道以后如何进行计数。
【问题讨论】:
-
没有任何代码,别人根本不可能帮你。能否提供一些示例代码!
标签: python image colors detection
我有一些图像,其中一些元素用红色或黄色框起来。盒子通常是一个多边形。
目标是计算红色和黄色元素的数量。
我该如何计算?
我曾尝试应用一个得到红色或黄色的蒙版,但效果相对较差。但我不知道以后如何进行计数。
【问题讨论】:
标签: python image colors detection
您可能会看到如下步骤:
每个步骤都有很多方法,我没有全部尝试过。正如我给它们编号的那样,其他人可能希望提出改进任何步骤的建议。
因此,对于第 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
为了得到这个,你可以看到所有的缝隙都被关闭了,轮廓是完整的:
OpenCV 和 scikit-image 都具有可用于此目的的形态学函数。
第 4 步 - 您现在可以使用 OpenCV 的 findContours() 来计算 blob 并获取它们的特征。
【讨论】: