我处理Java中的一个项目,它加载图像并查找每个像素的颜色信息。我需要在颜色定义上检测天空,这可能看起来像天空 - 使用蓝色范围。最初似乎最好使用RGB,但这需要定义所有蓝色(不可数)。我找到了分析方法,其中使用了每种颜色的HSV阈值,但不知道我如何分别使用颜色范围加载一些库,如何解决它。谢谢你的帮助。
答案 0 :(得分:3)
您可以使用静态方法java.awt.Color
将RGBtoHSB(...)
转换为其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;
}
我已为MIN_BLUE_HUE
和MAX_BLUE_HUE
提供了一些起始值,但您设置MIN_BLUE_HUE
和MAX_BLUE_HUE
的内容取决于您是否愿意接受'蓝色' - 即有多少绿色或紫色,它仍然可以作为天空接受?