martes, 8 de abril de 2014

Jugando con los fotogramas entregados por la cámara de nuestro Android (paso 10)

Una vez que hemos llegado aquí es hora de jugar con nuestra librería de visión artificial. Nada mejor que un filtro Canny para mostrar el funcionamiento de OpenCV en nuestra aplicación Android.

 /* Trabajamos con el fotograma obtenido */ 
 public Mat onCameraFrame(Mat inputFrame) {
  Imgproc.Canny(inputFrame, mFotogramaGrises, 10, 80);
  return mFotogramaGrises;
 }

Por cada fotograma obtenido de la cámara se llamará al evento (método de "callback" o "listener") "onCameraFrame" con nuestro fotograma como parámetro.

En el código hemos realizado lo siguiente:

  • Usamos el filtro Canny que nos ofrece la librería de procesamiento de imágenes (Imgproc) para convertir nuestro fotograma de entrada (inputFrame) en una imagen en escala de grises que contiene la imagen tratada. Los parámetros del filtro Canny son los umbrales 10 y 80 (muy genéricos, podemos cambiarlos a gusto).
  • Devolvemos la imagen obtenida al aplicar el filtro Canny (mFotogramaGrises) en vez de la imagen que nos entregó la cámara (inputFrame). Esto provocará que nuestra vista muestre el resultado del filtro.

Realmente no hubiera sido necesario crear la imagen mFotogramaGrises, podríamos haber aplicado el filtro sobre la misma imagen, pero de esa manera no hubieramos podido mostrar las ventajas de reserva previa de memoria para imágenes de trabajo y cómo se devuelve una imagen diferente a la obtenida.

Resultado:

Filtro Canny en un dispositivo Android Sony Xperia Neo V
Captura de pantalla del resultado de filtro Canny con OpenCV en Android

2 comentarios:

  1. intento correr la aplicacion pero dice que mi telefono tiene bloqueda la camara (motorola Xt890) me podrias hacer una sugerencia para resolver mi problema gracias

    ResponderEliminar
  2. Oscar sos un genio! Todo el material que expones es claro y de gran ayuda para quienes comienzan a desarrollar este tipo de aplicaciones.
    Me encuentro intentado dibujar en la pantalla recuadros como uno de los samples de OpenCV, el puzzle, pero no logro hacerlo. Yo quiero dividir la pantalla en cuatro recuadros para realizar una serie de reconocimientos dentro de cada uno, pero no logro dividir la pantalla ¿cómo podría hacerlo?
    Desde ya, muchas gracias.

    Saludos, Facundo.

    ResponderEliminar