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