¿Y si hubiera querido pintar la rejilla en color? En ese caso, la imagen blanca de fondo se debería haber creado con tres canales. Suponiendo que se quiere dibujar las líneas de color rojo, el programa sería:
El código utilizado para crear una imagen blanca de tres canales (en vez de uno, como en el programa anterior) es el mismo desarrollado para crear ventanas con el fondo de color, solo que ahora ese color es el blanco.
Para la asignación del color rojo a los píxeles que forman parte de las líneas de la rejilla, ahora se utiliza una terna (en este caso la que identifica el color rojo), en vez de un nivel de luz.
El resultado de la ejecución de este programa será el mostrado a continuación.
3.5 ALMACENAMIENTO DE UNA IMAGEN EN UN ARCHIVO
Ya sabe cómo mostrar en pantalla las imágenes cargadas previamente de un archivo o creadas dentro del propio programa como un objeto de la clase ndarray. Ahora va a aprender a guardarlas en un fichero. Para ello, OpenCV proporciona la función:
imwrite(archivo, imagen)
El primer argumento de esta función es el nombre del archivo (o un path) en el que se va a guardar la imagen contenida en el segundo.
Para practicar con esta nueva función, completará el programa del apartado anterior, en el que dibujaba una rejilla, para que, en vez de mostrarla, se almacene en un archivo. El código del programa es el siguiente.
La principal diferencia de este código con el descrito en el apartado anterior es que se sustituye la función imshow(), que muestra la rejilla en pantalla, por imwrite(), que la almacena en el archivo “rejilla.jpg”, dentro de la carpeta “imagenes”.
cv2.imwrite(‘../imagenes/rejilla.jpg’, img)
Los nombres de los archivos siempre deben tener una extensión, correspondiente a cualquiera de los formatos admitidos. De lo contrario, obtendrá el error: “could not find a writer for the specified extension in function ‘cv::imwrite”.
Si, por equivocación, indicara mal la ruta en la que debe situarse el archivo y esta no existiera, el programa no avisaría del error. Simplemente, no haría nada.
Ejecute el programa y, cuando en la shell de Python aparezca el mensaje “Imagen almacenada”, compruebe que en el directorio “imagenes” exista el archivo creado. Al abrirlo, verá la rejilla que acaba de dibujar.
Si quiere ver las imágenes de la carpeta donde se almacenan sin necesidad de abrirlas, en el explorador de Windows seleccione la opción “Iconos grandes” del menú “Vista”.
Unidad 4
FUNCIONES DE INTERFAZ GRÁFICA DE USUARIO
En este capítulo conocerá las funciones gráficas básicas de creación de interfaces de usuario proporcionadas por OpenCV. Las utilizará para dibujar líneas, delimitar áreas o superponer textos informativos que muestren visualmente los resultados del procesamiento y el análisis de imágenes realizados.
La primera de estas funciones tiene que ver con el manejo de ventanas. Veamos qué es lo que ofrece.
4.1 VENTANAS
Hasta ahora, las ventanas en las que ha mostrado las imágenes se han creado automáticamente con la función imshow(). Sin embargo, OpenCV permite más posibilidades de creación y configuración. Veamos cuáles son las principales.
Para crear una ventana, OpenCV proporciona la función:
namedWindow(ventana)
El argumento de esta función es el nombre de la ventana, que es el que aparece en su barra de título. Además, dicho nombre será el utilizado en la lógica del programa para identificarla y, de esta forma, poder asociarla a imágenes, eventos de teclado o ratón, barras de desplazamiento, etc.
Opcionalmente, tiene un segundo argumento que puede tomar los siguientes valores:
• WINDOW_NORMAL. Permite cambiar el tamaño de la ventana sin restricciones.
• WINDOW_AUTOSIZE. El tamaño de la ventana se ajusta automáticamente al de la imagen mostrada, no puede ser modificada de forma manual.
• WINDOW_OPENGL. La ventana se creará con soporte OpenGL.
OpenGL (Open Graphics Library) es un estándar que define una API multilenguaje y multiplataforma para el desarrollo de gráficos 2D y 3D.
Si lo que desea es mover una ventana a una posición concreta del escritorio, use la función:
moveWindow(nombre ventana, x, y )
El primer argumento es el nombre de la ventana que se va a desplazar a las coordenadas x, y fijadas en los otros dos argumentos.
Para redimensionar una ventana, utilice la función:
resizeWindow(ventana, ancho, alto )
En este caso, la ventana indicada en el primer argumento adquiere las dimensiones establecidas en los otros dos argumentos.
Para cerrar una ventana, llame a la función:
destroyWindow(ventana)
Si lo que quiere es cerrar todas las ventanas que se hayan podido abrir en el programa, use esta otra función:
destroyAllWindows()
El siguiente programa muestra la imagen del cuadro de la niña, pero con una serie de particularidades.
Lo primero que se hace en el programa después de importar la librería OpenCV es cargar la imagen con el cuadro de la niña.
img = cv2.imread(‘../imagenes/cuadro.jpg’, 1)
Luego se crea una ventana (llamada “Cuadro”) utilizando la función namedWindow() con el flag WINDOW_NORMAL, por lo que, a diferencia de cuando se creaba con la función imshow(), ahora podrá redimensionarla sin restricciones. Además, al cerrar la ventana, si ejecutara de nuevo el programa, aparecería con las mismas dimensiones que tenía cuando la