2

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

4

1 回答 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_HUEMAX_BLUE_HUEto 将取决于您是否愿意接受“蓝色” - 即可以有多少绿色或紫色,并且仍然可以作为天空接受?

于 2012-05-22T16:48:57.167 回答