Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:检测颜色(例如,我的颜色是蓝色吗?)_Java_Hsv_Threshold - Fatal编程技术网

Java:检测颜色(例如,我的颜色是蓝色吗?)

Java:检测颜色(例如,我的颜色是蓝色吗?),java,hsv,threshold,Java,Hsv,Threshold,我用Java处理一个项目,它加载一个图像并查找每个像素的颜色信息。我需要在颜色定义上检测天空,这可能看起来像天空-使用蓝色范围。最初使用RGB似乎是最好的,但这需要定义所有蓝色的阴影(不可数)。我找到了分析方法,其中使用了每种颜色的HSV阈值,但不知道如何分别使用颜色范围加载一些库,以及如何解决。感谢您的帮助。您可以使用静态方法RGBtoHSB(…)将java.awt.Color转换为HSV值。然后你可以得到色调,并将其与构成“蓝色”的范围的边界进行比较 private static final

我用Java处理一个项目,它加载一个图像并查找每个像素的颜色信息。我需要在颜色定义上检测天空,这可能看起来像天空-使用蓝色范围。最初使用RGB似乎是最好的,但这需要定义所有蓝色的阴影(不可数)。我找到了分析方法,其中使用了每种颜色的HSV阈值,但不知道如何分别使用颜色范围加载一些库,以及如何解决。感谢您的帮助。

您可以使用静态方法
RGBtoHSB(…)
java.awt.Color
转换为HSV值。然后你可以得到色调,并将其与构成“蓝色”的范围的边界进行比较

private static final float MIN_BLUE_HUE = 0.5f; // CYAN
private static final float MAX_BLUE_HUE = 0.8333333f; // MAGENTA

public static boolean isBlue(Color c) {
  float[] hsv = Color.RGBtoHSB(c.getRed(), c.getGreen(), c.getBlue(), null);
  float hue = hsv[0];
  if (hue >= MIN_BLUE_HUE && hue <= MAX_BLUE_HUE){
    return true;
  } 
  return false;
}
private static final float MIN_BLUE_HUE=0.5f;//青色
专用静态最终浮标最大蓝色色调=0.8333333f;//洋红
公共静态布尔值为蓝色(c色){
float[]hsv=Color.RGBtoHSB(c.getRed(),c.getGreen(),c.getBlue(),null);
浮动色调=hsv[0];

如果(色调>=MIN\u BLUE\u色调和色调谢谢你的回答。这是同样的问题,当我使用RGB时-我必须定义一个色调、饱和度和值(或brigthess)的范围-使蓝色的组合-来编写它,这几乎是不可能的。我需要的是一些“生成器”(“库”),它包含所有的组合-颜色表。这“table”我用来与提到if的具体像素进行比较。@ZbyněkDufka:No-在HSV空间中,只有色调决定它是哪种颜色。饱和度决定颜色的“白色”。值/亮度决定颜色的“黑色”。