【发布时间】:2017-09-11 21:26:41
【问题描述】:
我有一个程序,它可以拍摄一张照片,然后确定我感兴趣的部分像素的 RGB 值。我取区域的平均 RGB 并将它们放入一个数组中。我想要做的是通过该数组并根据它的 RGB 值说它是例如“橙色”。我想在不限制这样的 RGB 值的情况下做到这一点。 if(r > 10 && g < 200 && b < 200) color is green. 原因是图像中的光照变化很大。所以如果我给它严格的限制,它可能会超出范围。我正在尝试考虑如何做到这一点,以便它是动态的,并且无论照片中的光线如何都能正常工作。
这并不是一个真正的代码问题,我正在尝试思考如何解决这个问题。如上所述,如果不使用约束,似乎无法想到其他方法,这就是我来到这里的原因。
这是一个颜色数组的例子。 (里面有24种颜色)
Color Array: [java.awt.Color[r=6,g=115,b=77], java.awt.Color[r=6,g=115,b=77], java.awt.Color[r=6,g=115,b=77], java.awt.Color[r=6,g=115,b=77], java.awt.Color[r=248,g=184,b=40], java.awt.Color[r=241,g=26,b=27], java.awt.Color[r=0,g=38,b=183], java.awt.Color[r=0,g=38,b=183], java.awt.Color[r=178,g=168,b=204], java.awt.Color[r=198,g=148,b=22], java.awt.Color[r=185,g=140,b=6], java.awt.Color[r=0,g=38,b=183], java.awt.Color[r=241,g=26,b=27], java.awt.Color[r=236,g=212,b=255], java.awt.Color[r=237,g=70,b=20], java.awt.Color[r=237,g=70,b=20], java.awt.Color[r=237,g=70,b=20], java.awt.Color[r=237,g=70,b=20], java.awt.Color[r=0,g=38,b=183], java.awt.Color[r=236,g=212,b=255], java.awt.Color[r=241,g=26,b=27], java.awt.Color[r=255,g=189,b=71], java.awt.Color[r=241,g=26,b=27], java.awt.Color[r=236,g=212,b=255]]
所以数组中的前 4 个索引将映射到 ["Green","Green","Green","Green"]
【问题讨论】:
-
例如根据你的定义,R = 11, g = 199, b =11 是红色的,但在我看来它确实是绿色的
-
这是一个例子,不实用我只是用它来解释我在说什么。 @HovercraftFullOfEels
-
什么没有意义?使用约束来确定每种颜色是什么? @HovercraftFullOfEels
-
所以您想在不使用 RGB 值的情况下确定颜色?
-
您必须定义要检测的基色。 RGB 是矢量,因此您可以尝试计算基色和数组列表中颜色之间的距离(欧几里得距离),然后选择距离最小的颜色,即最接近给定基色。