Visión artificial. Tomás Domínguez Mínguez
Чтение книги онлайн.
Читать онлайн книгу Visión artificial - Tomás Domínguez Mínguez страница 6
En la ruta de acceso al fichero de una imagen, el carácter ‘.’ simboliza el directorio en el que se encuentra el programa que se está ejecutando. Para acceder al directorio padre, se utilizaría ‘..’, como en este caso.
En los programas desarrollados para cada una de las prácticas, se supone que las imágenes se encuentran en archivos dentro de la carpeta “imagenes” (sin acento), situada al mismo nivel que las que contengan los programas que vaya desarrollando, siguiendo la estructura:
Ejecute el programa. El resultado obtenido lo puede ver a continuación.
Si observara que la ventana se cierra inmediatamente, añada al final del programa las sentencias:
Aunque se estudiarán en detalle más adelante, le avanzo que su función es la de esperar que se pulse una tecla antes de cerrar la ventana.
Pese a que OpenCV es multiplataforma y todos los programas se han probado en Windows, puede que se produzca este efecto en otros sistemas operativos. En ese caso, acuérdese de incluir dichas sentencias en el resto de programas que no las tengan, especialmente en los utilizados en los primeros capítulos.
Cambiando el segundo argumento de la función imread() por 1, la imagen se recuperaría con la información del color.
img = cv2.imread(‘../imagenes/cuadro.jpg’, 1)
Si la imagen ya estuviera cargada en color, una forma de convertirla posteriormente a blanco y negro sería utilizando la función:
cvtColor(imagen, espacio de color)
El primer argumento es la imagen que va a cambiar de espacio de color, que será el determinado por el segundo argumento. En el caso de tener una imagen BGR (como en este caso) y querer pasarla a blanco y negro, su valor sería COLOR_BGR2GRAY.
Existen multitud de códigos de conversión de espacios de color. A lo largo de este libro tendrá ocasión de utilizar frecuentemente el que cambia de BGR al HSV (tendrá ocasión de conocerlo más adelante) y viceversa, cuyos valores son COLOR_BGR2HSV y COLOR_HSV2BGR, respectivamente. Si quiere conocer todas las posibilidades de transformación de que dispone esta función, consulte https://docs.opencv.org/3.4/d8/d01/group__imgproc__color__conversions.html.
El siguiente código muestra un ejemplo de uso de esta función.
Aunque la imagen se carga en color (img), posteriormente se pasa a blanco y negro (img_byn) con la función cvtColor(), que es como finalmente se muestra.
Este proceso de conversión de una imagen en color a otra en blanco y negro es de gran importancia en visión artificial porque:
• Reduce el tamaño de la imagen, al no tener que mantener la información del color.
• Aumenta la eficiencia de los algoritmos de procesamiento de imágenes, al trabajar con un valor por píxel (en color serían 3). Esto es especialmente crítico cuando se utilizan algoritmos que consumen muchos recursos computacionales (especialmente si se usan ordenadores de bajas prestaciones) o es necesario dar respuesta en tiempo real (como sucede cuando se trabaja con aplicaciones de realidad aumentada).
• Hay filtros de procesamiento de imágenes que solo funcionan en escala de grises.
Para extraer los diferentes colores de la imagen, deberá utilizar la función:
split(imagen)
Esta función devuelve tres imágenes, una por cada uno de los colores primarios que la componen. Dichas imágenes se muestran en blanco y negro. Cuanto más claro sea un píxel, mayor será la intensidad del color primario correspondiente. Para comprobarlo, observe las siguientes figuras geométricas, cada una de las cuales se ha pintado en uno de los colores primarios.
Ahora escriba y ejecute el siguiente programa:
En este código, primero se importa la librería OpenCV y luego se carga la imagen anterior en color. A continuación, se ejecuta la función split(), que devuelve como resultado tres imágenes, una por cada color primario (img_azul, img_verde y img_roja). Finamente, dichas imágenes se muestran en ventanas independientes llamando tres veces a la función imshow().
Por lo tanto, el resultado de la ejecución del programa anterior serán tres ventanas, en cada una de la cuales se mostrará un solo color (que se verá blanco en su máxima intensidad y negro en su ausencia). Puesto que cada figura geométrica es de un color primario, en cada ventana se mostrará en blanco solo una de ellas (la que tiene el color por el que se filtra), y desaparecen el resto, que se funden con el negro del fondo. En visión artificial, este tipo de filtros de color son de gran utilidad, ya que sirven para seleccionar objetos en la imagen sobre los que interesa poner atención y descartar el resto.
Para volver a juntar los componentes de cada color en la misma imagen, utilice la función:
merge(imagen azul, imagen verde, imagen roja)
Dicha función devolvería la imagen en color original.
3.2 OBTENCIÓN DE LAS CARACTERÍSTICAS DE UNA IMAGEN
Las imágenes se almacenan como matrices de píxeles en objetos de la clase ndarray, de los que se pueden extraer características clave como sus dimensiones, el número de canales que las componen, el tipo de dato con el que se almacena la información o el tamaño que ocupa en disco.
Para conocer las dimensiones y el número de canales de una imagen, acceda a su atributo:
shape
El valor de dicho atributo es una tupla con tres valores:
(alto, ancho, n.° canales)