Me ocupo de un proyecto en Java, que carga una imagen y encuentra información de color de cada píxel. Necesito detectar el cielo en una definición de color, que puede parecer el cielo, utilizando el rango de color azul. Originalmente parecía mejor usar RGB, pero esto requiere una definición de todos los tonos de azul (incontables). Encontré el método de análisis, donde se usan umbrales de HSV para cada color, pero no tengo idea de cómo podría cargar algunas bibliotecas usando rangos de color, respectivamente, cómo podría resolverse. Gracias por cualquier ayuda.

2
Zbyněk Dufka 22 may. 2012 a las 20:18

1 respuesta

La mejor respuesta

Puede convertir un java.awt.Color a sus valores HSV utilizando el método estático RGBtoHSB(...). A continuación, puede obtener el tono y compararlo con los límites de un rango que, para sus propósitos, constituye 'azul', p. Ej.

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;
}

Ofrecí algunos valores iniciales para MIN_BLUE_HUE y MAX_BLUE_HUE, pero lo que establezcas para MIN_BLUE_HUE y MAX_BLUE_HUE dependerá de si estás dispuesto a aceptar como 'azul' - es decir, ¿cuánto verde o violeta podría haber, y todavía sería aceptable como cielo?

3
amaidment 22 may. 2012 a las 20:48
Gracias por tu respuesta. Es el mismo problema, cuando uso RGB - debo definir un rango de Tono, Saturación y Valor (o brigthess) - combinaciones que hacen un color azul - para escribirlo, eso es casi imposible. Lo que necesito es un "generador" ("biblioteca"), que contiene todas las combinaciones: tabla de colores. Esta "tabla" que utilizo para comparar con píxeles de hormigón con el mencionado if.
 – 
Zbyněk Dufka
22 may. 2012 a las 21:29
@ ZbyněkDufka: No, en el espacio HSV, solo el tono determina de qué color es. La saturación determina qué tan "blanco" es el color. El valor / brillo determina qué tan "oscuro" es el color.
 – 
amaidment
23 may. 2012 a las 12:01