Jür*_* K. 15 java rgb pixel colors range
我要做的是测试像素是否为蓝色.
例如:蓝色在RGB中定义为rgb(0,0,255).典型的颜色深度为8位(256色),16位(约65,000),24位(约1600万)和32位(超过40亿种不同颜色).因此,显然有超过1种蓝色.
如果蓝色与否,如何定义蓝色范围并测试每个像素?关于不同的深度,我需要记住什么?
到目前为止我的代码是:
BufferedImage image = ImageIO.read(file);
// Getting pixel color by position x and y
for (int i = 0; i < image.getWidth(); i++) {
for (int j = 0; j < image.getHeight(); j++) {
int clr = image.getRGB(i, j);
Run Code Online (Sandbox Code Playgroud)
注1:
http://www.workwithcolor.com/cyan-blue-color-hue-range-01.htm
这里的问题是,颜色步骤之间是什么?
一个例子就是很棒.
注2:
我刚刚发现了一个关于我感兴趣的话题的演讲:
在第13页,我们可以看到红色的定义.但是你如何定义其他颜色?
在我看来,最简单的方法是将颜色格式转换为HSV/HSB,然后为Hue选择蓝色范围.确切的范围可能是一个问题,但我主要使用165(下面是绿色)到240(上面是紫色/紫色).饱和度和值/亮度仅控制阴影,但请注意,0附近的饱和度将呈灰色,带有一些蓝色阴影,而接近0的值几乎为黑色.因此,您还可以检查饱和度> 10和值> 15,但当然您可以选择自己的值来满足您的需求.
示例代码(未测试):
boolean isBlue(int rgb){
Color color = new Color(rgb);
float[] hsb = Color.RGBtoHSB(color.getRed(), color.getGreen(), color.getBlue(), null);
// now [0] is hue, [1] saturation and [2] value/brightness
// all values are between 0 and 1 so you must divide hue by 360 and others by 100
if(hsb[0] > 165/360 && hsb[0] < 240/360 && hsb[1] > 0.1 && hsb[2] > 0.15)
return true;
return false;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1006 次 |
| 最近记录: |