如何在python中计算图像上的红色和黄色多边形?

2024-09-29 23:31:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一些图片,有些元素用红色或黄色框起来。长方体通常是多边形。在

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

我怎么算?在

我试着用一种能得到红色或黄色的面膜,但效果相对较差。但我不知道以后怎么数数。在

mask_example


Tags: 目的元素数量example图片mask多边形红色
1条回答
网友
1楼 · 发布于 2024-09-29 23:31:39

您可能会看到以下步骤:

  • 第1步-区分红色和黄色
  • 第2步-遮住红色,做剩下的步骤,然后遮住黄色,做剩下的步骤
  • 第3步-填充形状轮廓,使其完整和连续
  • 第四步-找出形状的轮廓并计算它们

每一步都有很多方法,但我还没有全部尝试过。正如我对他们的编号,其他人可能希望对任何一步改进提出建议。在


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

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

+1只是停止被零除。实际上,我是这样用ImageMagick做的,但是你可以用PIL/Pillow+Numpy,或者OpenCV来做同样的事情:

^{pr2}$

enter image description here

希望你能看到这使得黄色像素变暗,红色像素变浅。在

然后给你一个阈值,你可以用它来分别打开和关闭每种颜色。顺便说一下,Lab色彩空间中的a通道也是一个合理的判别式。在


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


第3步意味着填写这些方框。你可以用“形态学”来实现这一点,所以我可以用一个15x1像素的水平结构元素来缩小白色水平线中的间隙:

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

enter image description here

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

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

要实现这一点,您可以看到间隙已全部闭合,轮廓完整:

enter image description here

你可以使用OpenCV和OpenCV的函数。在


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

相关问题 更多 >

    热门问题