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

时间:2012-05-22 16:18:28

标签: java hsv threshold

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

1 个答案:

答案 0 :(得分:3)

您可以使用静态方法java.awt.ColorRGBtoHSB(...)转换为其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_HUEMAX_BLUE_HUE提供了一些起始值,但您设置MIN_BLUE_HUEMAX_BLUE_HUE的内容取决于您是否愿意接受'蓝色' - 即有多少绿色或紫色,它仍然可以作为天空接受?