Visión artificial. Tomás Domínguez Mínguez

Читать онлайн.
Название Visión artificial
Автор произведения Tomás Domínguez Mínguez
Жанр Математика
Серия
Издательство Математика
Год выпуска 0
isbn 9788426733474



Скачать книгу

de un programa y, en consecuencia, su comportamiento.

      Para crear una barra de desplazamiento, OpenCV ofrece la función:

Illustration Illustration

      Esta función tiene un último argumento opcional, que contendría la información adicional que quisiera pasarse a la función de callback. Su finalidad es la de evitar el uso de variables globales.

      El primer parámetro de esta función es el nombre de la barra de desplazamiento. Se mostrará a su lado, en la ventana a la que se haya asociado, establecida por el segundo argumento. El valor inicial es el que se muestre al crearse. El valor final es el valor máximo que podrá seleccionarse. Por último, la función de callback se ejecutará cada vez que se mueva la barra de desplazamiento.

Illustration

      El margen de valores que podrá elegir en una barra de desplazamiento será entre 0 (no se puede modificar) y el valor máximo.

      Para practicar con esta función, va a modificar el programa del apartado anterior (en el que se escribía centrado en la ventana el nombre de la niña), para añadir una barra de desplazamiento que permita modificar la escala de dicho texto.

      El código del programa es el siguiente:

Illustration Illustration

      Tras importar la librería OpenCV, se carga la imagen del cuadro de la niña, pero esta vez se hace además una copia con el método copy(). El motivo es porque, cuando se cambie la escala, antes de volver a escribir el texto con el nuevo tamaño de letra, habrá que borrar el anterior. Eso se consigue, de forma indirecta, volviendo a cargar la imagen original (ya que no tiene ningún texto).

Illustration

      A continuación, se declaran las variables del programa que ya conoce.

Illustration

      Ahora salte la declaración de las dos funciones siguientes para ir a las sentencias del final del programa. En primer lugar, se invoca la función auxiliar centrarImagen(), que toma como argumento de entrada la escala del texto y devuelve como salida las coordenadas x, y donde se debe comenzar a escribir para que quede centrado en la ventana.

      posicion_x, posicion_y = centrarImagen(escala)

      Una vez conocidas dichas coordenadas, las siguientes sentencias escriben el texto sobre la imagen y la muestran en la ventana “Cuadro”.

Illustration

      La última sentencia es la que crea la barra de desplazamiento. Dicha barra (llamada “Escala texto”) quedará asociada a la ventana “Cuadro” creada en la sentencia anterior, que es la que muestra la imagen de la niña con el texto centrado. Su valor inicial es el de la variable escala y su valor final es 5. La función de callback que se ejecutará cuando se modifique este valor es actualizar_imagen().

      cv2.createTrackbar(‘Escala texto’, ‘Cuadro’, escala, 5, actualizar_imagen)

      Lo primero que se hace en la función actualizar_imagen() es volver a recuperar la imagen inicial. Al tener que poner el nombre de la niña con un tamaño diferente, hay que borrar lo que se hubiera escrito anteriormente. A continuación, se llama a la función centrarImagen(), y se le pasa como argumento el valor de la nueva escala con el fin de obtener las coordenadas x, y en las que se debe situar el texto para que siga centrado. Luego, se escribe sobre la imagen el nombre de la niña con dicha escala en la nueva posición (posicion_x, posicion_y). Por último, se muestra en pantalla.

Illustration

      En la función centrarImagen() se obtiene el ancho y el alto del texto (ancho_texto, alto_texto) con la función getTextSize(), cuya escala ha sido pasada como argumento (escala). Después, se calcula la posición x, y (posicion_x, posicion_y) en la que debe empezar a escribirse para que siga apareciendo centrado en pantalla. Dichos valores serán los devueltos como resultado de su ejecución.

Illustration

      Ejecute el programa y observe cómo cambia el tamaño del texto según modifica el valor de la barra de desplazamiento. En la siguiente imagen puede ver dos ejemplos en los que el valor de la escala es 1 y 4.

Illustration

      Unidad 5

      INTERACCIÓN CON EL RATÓN Y EL TECLADO

      La forma habitual de utilizar la interfaz de usuario de una aplicación es a través del ratón y el teclado. En OpenCV, dicha interacción se realiza capturando los eventos que producen estos dispositivos. Cuando se mueve o se pulsa el ratón, o cualquier tecla, dichos eventos provocan la ejecución de una función de callback, que será la encargada de realizar las acciones correspondientes. Veamos cómo funciona.

      Con frecuencia, será necesario interaccionar con la imagen mostrada en pantalla mediante el ratón. Por ese motivo, OpenCV proporciona un mecanismo que permite la captura de los eventos que genera, los cuales provocarán la ejecución de la función de callback encargada de realizar las tareas correspondientes a cada uno de ellos. La forma de establecer este mecanismo de captura de eventos es mediante la función:

      setMouseCallback(ventana, función)

      El primer argumento es el nombre de la ventana en la que se van a capturar los eventos del ratón, mientras que el segundo corresponde al nombre de la función de callback encargada de manejarlos.

      Se podría añadir un tercer argumento con los parámetros adicionales que se pasarían a la función de callback cuando se produjera el evento.

      La función de callback se debe declarar con los siguientes argumentos:

      función de callback(evento, x, y, flags)

      El primer argumento es el evento generado por el ratón, representado por las constantes:

      • EVENT_MOUSEMOVE. El puntero del ratón se ha movido.

      • EVENT_LBUTTONDOWN. Se ha presionado el botón izquierdo del ratón.

      • EVENT_RBUTTONDOWN. Se ha presionado el botón derecho del ratón.

      • EVENT_MBUTTONDOWN. Se ha presionado el botón central del ratón (si lo hubiera).

      • EVENT_LBUTTONUP. Se deja de presionar el botón izquierdo del ratón.

      • EVENT_RBUTTONUP. Se deja de presionar el botón derecho del ratón.

      • EVENT_MBUTTONUP. Se deja de presionar el botón central del ratón (si lo hubiera).

      • EVENT_LBUTTONDBLCLK. Se hace doble clic con el botón izquierdo del ratón.

      • EVENT_RBUTTONDBLCLK. Se hace doble clic con el botón derecho del ratón.

      • EVENT_MBUTTONDBLCLK.