【问题标题】:Calculate a color threshold from within a contour dynamically动态计算轮廓内的颜色阈值
【发布时间】:2018-04-04 01:47:58
【问题描述】:

我有一个包含 3 种颜色的输入图像。这些颜色是圆形的并且是嵌套的。

图像与此类似: https://www.google.ie/search?q=red+yellow+blue+nested+circles&client=ms-unknown&tbm=isch&tbs=rimg:CbQTsOKsM7yhIkCaDOdJHzqnN2Xk-DhItFHm0Zqt6wMB32Tm1CzyzQ7wrXERbVqngEyMBzO57J8UuHLak9WPqWfjV7kgvdJ47BJlKhIJmgznSR86pzcR8SW2ldYWlqIqEgll5Pg4SLRR5hG-6WlMFrVBvioSCdGaresDAd9kEVFfCyyB-AgqKhIJ5tQs8s0O8K0RT790ELynuK8qEglxEW1ap4BMjBHBPar4Jd2NtioSCQczueyfFLhyEY7iP_13IGcsOKhIJ2pPVj6ln41cRTMOWeqZE5oYqEgm5IL3SeOwSZREray5kAy-dzw%3D%3D&tbo=u&ved=0ahUKEwjWzfSC6IbXAhXFbBoKHW3GBrUQuIIBCCM#imgrc=5tQs8s0O8K32hM:

我将处理几张这样的图像。图像总是相同的。但是由于相机、照明、甚至打印机的不同,实际颜色可能会有所不同。因为它总是按照显示的顺序是红色黄色绿色。通过使用 HSV 和阈值,我可以轻松确定每种颜色的上限和下限。但是,如果我更改为一组不同的图像,这些值将不再起作用。

我克服这个问题的想法是首先在图像中寻找轮廓。 对于每个轮廓,我想获得一个上限和下限。使用 canny 、 gaussian 和 contours 的组合,我可以通过测试在每种颜色周围绘制轮廓,这似乎足以达到目的。

我遇到的困难是从轮廓中获取阈值。这可能吗?或者我是否有更简单的逻辑来实现这一目标?

目前我用的是python,但是语言是次要的。

【问题讨论】:

  • 您是否尝试过使用 HSV 颜色空间,并使用 inRange 来使用 Hue 值设置阈值?
  • 嗨,是的,我使用过 HSV,问题是虽然 usingHSV 适用于单个图像或几张图像,但它不足以适用于所有图像,这就是我试图获得图像中每个图像的阈值。图像打印在纸上,光线之类的东西很少,打印机剩下多少墨水会稍微改变阈值的有效性
  • 也许一个真实图像的例子会帮助更多的人帮助你。
  • 谢谢,我会按照你的建议上传一张真实的照片。你认为我想要实现的目标是可能的吗?
  • 这取决于图像,取决于您使用的策略,以及您可以有多少错误......但主要取决于图像变化多少,如果没有,您可以尝试机器学习跨度>

标签: python opencv image-processing


【解决方案1】:

忘记轮廓,它们会使事情变得比必要的更难。

更好的方法是使用 k-means 对像素进行分类。初始化至少三个簇,以绿色、黄色、红色为中心。也许一个以白色为中心,作为背景。

收敛后你应该有准确的颜色,连同分割。

https://en.wikipedia.org/wiki/K-means_clustering#Standard_algorithm

【讨论】:

  • 谢谢,这种方法看起来很有趣。我稍后会尝试更新帖子。
猜你喜欢
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 2012-08-29
  • 1970-01-01
  • 2022-12-24
  • 2017-02-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多