我用 Java 处理一个项目,它加载图像并查找每个像素的颜色信息。我需要在颜色定义上检测天空,这可能看起来像天空 - 使用蓝色范围。最初似乎最好使用 RGB,但这需要定义所有蓝色阴影(不可数)。我找到了分析方法,每种颜色使用 HSV 的阈值,但不知道如何分别使用颜色范围加载一些库,如何解决。谢谢你的帮助。
问问题
1819 次
1 回答
3
您可以java.awt.Color
使用静态方法将 a 转换为它的 HSV 值RGBtoHSB(...)
。然后,您可以获取色调,并将其与范围的边界进行比较 - 出于您的目的 - 构成“蓝色” - 例如
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
我已经为and提供了一些起始值MAX_BLUE_HUE
,但是您设置MIN_BLUE_HUE
和MAX_BLUE_HUE
to 将取决于您是否愿意接受“蓝色” - 即可以有多少绿色或紫色,并且仍然可以作为天空接受?
于 2012-05-22T16:48:57.167 回答