我有一个由3种颜色组成的输入图像。这些颜色是圆形的并且是嵌套的。
我将使用这样的几个图像。图像始终是相同的。但是对于不同的相机,照明,甚至打印机的差异,实际的颜色可能会有所不同。因为它会在showen中显示为红黄绿色。通过使用HSV和阈值,我可以轻松确定每种颜色的上限值和下限值。但是,如果我更改为不同的图像集,则这些值不再起作用。
我克服这个问题的想法是首先在图像中寻找轮廓。 对于每个轮廓,我想得到一个上限和下限。使用canny,gaussian和contours的组合,我能够在测试中绘制每种颜色周围的轮廓,这似乎足够通用。
我被困住的地方是从轮廓内获取阈值。这可能吗?或者是否有更简单的逻辑我想要实现这个目标?
目前我正在使用python,但语言是次要的。
答案 0 :(得分:1)
忘记轮廓,他们会使事情变得更加困难。
更好的方法是使用k-means对像素进行分类。使用至少三个簇进行初始化,以绿色,黄色,红色为中心。也许一个以白色为中心,为背景。
收敛后,你应该有准确的颜色和分割。
https://en.wikipedia.org/wiki/K-means_clustering#Standard_algorithm