¿Cómo puedo detectar mejor los diferentes colores LED con la cámara de un teléfono Android y OpenCV?

Estoy tratando de identificar y diferenciar los colores de los LED contra un fondo negro con OpenCV en un teléfono Android, pero estoy luchando. Mis investigaciones hasta la fecha señalan dos cuestiones separadas:

  1. Usando OpenCV, la cámara aparece por defecto a balance de blancos automático que hace difícil diferenciar entre ciertos colores. Usando la cámara nativa de Android, las mejores imágenes parecen producirse con un balance de blancos ajustado en "Nublado".
  2. OpenCV proporciona imágenes en el espacio de color RGB, pero RGB no coincide con la distancia percibida por el ser humano entre los colores, lo que significa que una métrica de distancia RGB Euclidiana no es una solución óptima (consulte Cómo comparar dos colores ).

En consecuencia tengo tres preguntas:

  1. ¿Existe alguna manera en Android Java o OpenCV para establecer el balance de blancos de la cámara de modo que influya en la imagen resultante devuelta por OpenCV?
  2. Si no, ¿hay un algoritmo disponible (preferiblemente en Java) para modificar el balance de blancos de la imagen de OpenCV?
  3. ¿Existe un algoritmo disponible (de nuevo, preferiblemente en Java) para convertir los colores RGB a un espacio de color alternativo que mejor coincida con la distancia percibida por el hombre entre los colores?

Gracias

  1. Creo que eso está relacionado con el controlador de dispositivo de la cámara si puedes controlarlo o no a través de la API de cámara de Android.
  2. Esto es útil para usted: Detección de colores

Me gusta la electrónica, por lo que una simple resistencia dependiente de la luz haría eso sin ningún código :).

Para identificar diferentes colores LED de fondo negro, propongo lo siguiente:

  1. Primero, usar la función cvtColor de OpenCV convierte su RGB en espacio de color HSV. Aquí HSV significa Hue (como rojo, verde, amarillo, azul, etc.), Saturación (cuán saturado es el color), Valor (ligereza). Después de la conversión para cada valor RGB tendrá valor de HSV. Como RGB HSV tiene tres canales H, S y V.

  2. En segundo lugar, puesto que usted está interesado en el color del LED, analiza solamente el componente del matiz para decidir el color del LED. Por ejemplo, puede limitar el canal de tono y decidir qué parte de la imagen contiene tonos de decir 10 a 25 y así sucesivamente … Trazar / imprimir la imagen umbral para comprobar su código.

Mi respuesta a la pregunta 1 (que significa que no necesitaba una respuesta a la pregunta 2) fue usar el código OpenCV Tutorial 3 (Control de cámara) (ver ejemplos de OpenCV4Android ) y modificar los métodos de efectos de color para permitir la configuración del balance de blancos:

public List<String> getWhiteBalanceList() { return mCamera.getParameters().getSupportedWhiteBalance(); } public boolean isWhiteBalanceSupported() { return (mCamera.getParameters().getWhiteBalance() != null); } public String getWhiteBalance() { return mCamera.getParameters().getWhiteBalance(); } public void setWhiteBalance(String whiteBalance) { Camera.Parameters params = mCamera.getParameters(); params.setWhiteBalance(whiteBalance); mCamera.setParameters(params); } 

Una vez que supe que funcionó, pude añadir una llamada a mi hilo principal para establecer el balance de blancos correcto:

 mOpenCvCameraView.setWhiteBalance(Parameters.WHITE_BALANCE_CLOUDY_DAYLIGHT); 

En respuesta a la pregunta 3, utilicé la respuesta de Java en Color Logic Algorithm .

  • Matcher Assertions error error opencv Android
  • Aplicación de Android que utiliza tecnología de reconocimiento de imagen
  • Proyección posterior en Java con OpenCV
  • Conversión de NV21 a RGB mediante OpenCV en Android
  • UnsatisfiedLinkError: Método nativo no encontrado - Android
  • Cómo extraer formas geométricas simples de contornos en opencv
  • No se puede construir caffe en android
  • Cómo configurar la resolución de la cámara en Android con OpenCV?
  • OpenCV color-valor de un píxel usando mat.get () devuelve a veces null
  • Uso de la cámara LED Flash con OpenCV en Android
  • ¿Cómo integrar el metaio + Open CV para la aplicación android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.