以编程方式检测颜色

时间:2014-07-25 22:30:02

标签: algorithm colors rgb

我能够从照片中捕获颜色的RGB值,但我希望能够以编程方式检测该颜色是否为红色,橙色,黄色,绿色,蓝色,紫色,棕褐色或白色或黑色。

所以我需要指定返回的RGB范围,例如,红色...或蓝色...等等。我目前有这样的东西,但它不包括所有可能的RGB品种。

RED

R = 255,G <= 102,B = 0

R = 255,G = 0,B <= 150

ORANGE&amp; YELLOW

R = 255,G> = 108&amp; &lt; = 252,B = 0

R = 240,G = 255,B = 0

依旧......

有谁知道如何获取任何RGB值并检测它是否为红色,橙色,黄色,绿色,蓝色,紫色,棕褐色,白色或黑色?

3 个答案:

答案 0 :(得分:1)

由于人类感知的工作方式,难以从RGB值计算颜色的视觉相似性。一种流行的方法是CIE 2000。有一些库可以实现它,例如python-colormath。然后,您可以简单地将颜色距离与每种颜色进行比较(您可以找到常用颜色名称here的合理RGB值)并选择距离最小的颜色。

答案 1 :(得分:0)

我认为这种分类取决于人。例如,我的很多男性朋友(我自己)中只有几种颜色(红色,蓝色,绿色,黄色),而我的很多女性朋友至少有20个粉红色的单词。即使我们忽略了这一点,并且我们决定坚持使用较少数量的值,如果某些东西是红色或棕色,或者某些东西是紫色或粉红色,我们经常会争吵。如果人类无法给出明确的答案,那么你就无法教电脑来做到这一点。

据说你的问题实际上是一个聚类/分类算法,并且有很多算法可以解决它。我建议使用某种neural network(例如使用带有3个输入神经元的backpropagation - 红色,绿色和蓝色)。你还需要很多例子 - 即提供颜色和分类(这种颜色是蓝色等)。即使您决定使用其他算法,您仍然需要提供一套教育集 - 您已经分类的一组示例,此集合包含的示例越多,分类就越好。

答案 2 :(得分:0)

即使是人类,也很难做出决定。 我只是将rgb值看作3d色室。只需给出一些颜色(红色:255,0,0,......),并说欧几里德距离x中的所有颜色都是相同的颜色。

距离(红色,颜色)= sqrt((red.r - color.r)^ 2 +(red.g - color.g)^ 2 +(red.b - color.b)^ 2)

或者只测量所有距离并获得最短的颜色。