如何从 RGB 值中分辨可见颜色

How to tell visible color from RGB values

我正在进行一个图像分析项目,该项目检查大量图像中设定位置的 rgb 值,并且需要能够知道某个区域是绿色还是蓝色。最初我认为我可以通过测试 rgb 中的 g>b 来做到这一点,但我开始意识到由于与红色的混合,绿色图像中的蓝色通常比绿色多。我怎么知道 - 可能是公式或算法,什么颜色明显看起来是基于 rgb 的?

您可以使用 ColorRGBtoHSB 方法将 RGB 值转换为 HSB 值。得到的色调值介于0-1之间,其中绿色(0,255,0)的色调值为0.33,蓝色(0,0,255)的色调值为0.66

float[] hsb = Color.RGBtoHSB(0, 255, 0, null);//green
System.out.println(hsb[0]);
hsb = Color.RGBtoHSB(0, 0, 255, null);//blue
System.out.println(hsb[0]);

由此您可以为色调值 'closer' 到绿色创建一个度量标准,例如任何色调值 < 0.5 都比蓝色更绿。

下图描述了这种颜色的颜色变化 space,X 轴为色相(请注意,这张图片的色相在 0-360 度之间变化,而 RGBtoHSBreturns 值 0-1)