【发布时间】:2012-05-22 16:18:27
【问题描述】:
我用 Java 处理一个项目,它加载图像并查找每个像素的颜色信息。我需要在颜色定义上检测天空,这可能看起来像天空 - 使用蓝色范围。最初似乎最好使用 RGB,但这需要定义所有蓝色阴影(不可数)。我找到了分析方法,每种颜色使用 HSV 的阈值,但不知道如何分别使用颜色范围加载一些库,如何解决。感谢您的帮助。
【问题讨论】:
我用 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;
}
我已经为MIN_BLUE_HUE 和MAX_BLUE_HUE 提供了一些初始值,但是您将MIN_BLUE_HUE 和MAX_BLUE_HUE 设置为什么取决于您愿意接受“蓝色” - 即多少绿色还是紫色的,还是可以当天空的?
【讨论】: