Práctica

Práctica

En este apartado se presenta al alumno el código de un programa que muestra todas las funciones de OpenCV presentadas hasta el momento, con el objetivo de que pueda verlas en funcionamiento, ver ejemplos prácticos y sencillos y aprenda a usarlas por su cuenta.

Para ello, siga las siguientes actividades en el orden que se presentan:

Práctica: Introducción

Para empezar con la práctica, el alumno debe descargarse el siguiente fichero, descomprimirlo, y desde consola, en el directorio de descompresión, compilar el programa tecleando make. Con esto debería compilarse el programa sin problemas. Si es así, teclea despues opencvBasicsTest y aparecerá la siguiente ventana:

 

Como indica el programa, usa los cursores arriba y abajo para moverte por el menu, y pulsa intro para entrar en algún menu o para activar una opción. Como se puede apreciar, los menus coinciden prácticamente con los apartados explicados, que son:
  • Funciones de entrada y salida. En esta opción del programa permite cargar una imagen de disco, guardar una imagen generada en OpenCV, abrir la cámara web, cargar un vídeo o generar un vídeo (con el contenido que se muestra en el programa).
  • Funciones gráficas. En esta opción el programa generará una imagen con líneas, rectángulos, círculos y textos de distintos colores, mostrando las capacidades gráficas de OpenCV.
  • Funciones de procesamiento básico. Esta parte se ha dividido en dos menus (operadores y transformaciones de color) para que el submenú correspondiente no fuese excesivamente grande. En esta opción se muestran las imágenes resultantes de sumar, restar, invertir una imagen del disco duro así como el resultado de transformar una imagen de RGB a HSV, viendo por separado los canales H, S y V, así como una binarización de la imagen.
  • Funciones de procesamiento avanzado. En esta opción se puede ver la detección de bordes, líneas y caras aplicada a una imagen leída de disco.

Práctica: Funciones de entrada y salida

En esta parte nos centraremos en la opción del menú de entrada y salida. Al seleccionar esa opción en el programa, se obtendrá una pantalla similar a ésta:

Imagen original extraida de: http://commons.wikimedia.org/wiki/File:David_Shamban_Cello_Solo.jpg subida por: Naomi Shamban

Concretamente, esa pantalla es la que se obtiene cuando se selecciona la operación de leer imagen. La parte de código correspondiente a esta parte del programa está en el fichero opencvBasics.cpp, en la función menuInputOutput (líneas 86 a 137). Esta parte del código debería ser fácil de entender, ya que las funciones ya han sido explicadas anteriormente. Lo único que hay que tener en cuenta es que la imagen showImg es una variable global que es la que se muestra en la ventana de OpenCV en la función update.

 

Práctica: Funciones gráficas

En esta parte nos centraremos en la opción del menú de gráficos. Al seleccionar esa opción en el programa, se obtendrá una pantalla similar a ésta:

Concretamente, esa pantalla es la que se obtiene cuando se selecciona la opción de gráficos. La parte de código correspondiente a esta parte del programa está en el fichero opencvBasics.cpp, en la función menuGraficos (líneas 139 a 152). Como tareas para el alumno en esta parte de la práctica se requiere:

  1. Modificar la función menuGraficos de forma que al pulsar la opción de gráficos el rectángulo rojo aparezca en verde, el círculo verde esté en la parte superior de la imagen, y en el texto ponga: "Esto es muy fácil".
  2. Teniendo en cuenta el código que se acaba de modificar, y el ejemplo holaMundo explicado anteriormente, se pide modificar el fichero holaMundo de forma que despues de cargar la imagen, se pinte un marco azul en el borde de la imagen (un rectángulo con una línea de ancho 5 por ejemplo) y un círculo rojo en el centro de la imagen de radio 15).

NOTA: Se recuerda que despues de cada modificación que se haga sobre los ficheros fuentes hay que recompilar el programa con make.

Práctica: Operaciones con matrices

En esta parte nos centraremos en las opciones del menú operaciones. Al seleccionar esta opción en el programa, se obtendrá una pantalla como la siguiente:

Concretamente, esta es la pantalla que se obtiene cuando se selecciona la opción de suma de matrices dentro de operaciones. La parte de código correspondiente a esta parte del programa está en el fichero opencvBasics.cpp, en la función menuOperacionesBasicas (líneas 154 a 194). Como tareas para el alumno en esta parte de la práctica se requiere:

  1. Modificar la función sumar matrices del menu operaciones de forma que al seleccionar esa opción lo que se haga sea aumentar la luminosidad de la imagen.
  2. Hacer lo contrario con la función resta, que baje la luminosidad de la imagen cargada.
PISTA: Aumentar la luminosidad no es más que aumentar el valor de los canales R, G y B simultáneamente.

Práctica: Transformaciones del espacio de color

En esta parte nos centraremos en la opción del menú transformaciones del espacio de color. Al seleccionar esta opción en el programa, se obtendrá una pantalla como la siguiente:

Concretamente, esta es la pantalla que se obtiene cuando se selecciona la opción de HSV dentro de Trans.Color. La parte de código correspondiente a esta parte del programa está en el fichero opencvBasics.cpp, en la función menuTransformacionesDeColor (líneas 196 a 253).

Como tarea para el alumno en esta parte de la práctica se pide que estudie detenidamente la representación en HSV de la imagen cargada. Para ello se recomienda mirar también cada uno de los canales H, S y V por separado.

 

Cambio de colores....

En la representación en HSV de la imagen cargada el fondo, originalmente en blanco, se muestra en rojo, mientras que el cuadrado verde sigue mostrándose en verde (aunque más claro). ¿A que se debe esto?

Práctica: Algoritmos avanzados de procesamiento de imágenes

En esta parte nos centraremos en la opción del menú algoritmos. Al seleccionar esta opción en el programa, se obtendrá una pantalla como la siguiente:

Concretamente, esta es la pantalla que se obtiene cuando se selecciona la opción de detectar líneas dentro de algoritmos. La parte de código correspondiente a esta parte del programa está en el fichero opencvBasics.cpp, en la función menuAlgoritmosAvanzados (líneas 255 a 304).

Como tarea para el alumno en esta parte de la práctica se pide que estudie en la función menuAlgoritmosAvanzados la parte dedicada a la detección de líneas, y modifique el programa holaVideo para que se aplique la detección de líneas a los fotogramas capturados por la cámara.

NOTA: Es posible que para que detecte líneas o para que no detecte demasiadas líneas se tengan que ajustar los parámetros de las funciones.

¿Has notado ....?

¿Has notado al poner la opción de detección de caras que el programa va mas lento y al moverte por los menus con el cursor tarda más en responder? ¿A que se debe?

Obra publicada con Licencia Creative Commons Reconocimiento 2.5