如何从 RGB 值中分辨可见颜色
How to tell visible color from RGB values
我正在进行一个图像分析项目,该项目检查大量图像中设定位置的 rgb 值,并且需要能够知道某个区域是绿色还是蓝色。最初我认为我可以通过测试 rgb 中的 g>b
来做到这一点,但我开始意识到由于与红色的混合,绿色图像中的蓝色通常比绿色多。我怎么知道 - 可能是公式或算法,什么颜色明显看起来是基于 rgb 的?
您可以使用 Color 类 RGBtoHSB
方法将 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 度之间变化,而 RGBtoHSB
returns 值 0-1)
我正在进行一个图像分析项目,该项目检查大量图像中设定位置的 rgb 值,并且需要能够知道某个区域是绿色还是蓝色。最初我认为我可以通过测试 rgb 中的 g>b
来做到这一点,但我开始意识到由于与红色的混合,绿色图像中的蓝色通常比绿色多。我怎么知道 - 可能是公式或算法,什么颜色明显看起来是基于 rgb 的?
您可以使用 Color 类 RGBtoHSB
方法将 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 度之间变化,而 RGBtoHSB
returns 值 0-1)