Visión artificial. Tomás Domínguez Mínguez. Читать онлайн. Newlib. NEWLIB.NET

Автор: Tomás Domínguez Mínguez
Издательство: Bookwire
Серия:
Жанр произведения: Математика
Год издания: 0
isbn: 9788426733474
Скачать книгу
vez creada la ventana, se mostrará en la parte superior izquierda del escritorio.

      cv2.moveWindow(‘Cuadro’, 0, 0)

      Por último, se muestra la imagen en dicha ventana.

      cv2.imshow(‘Cuadro’, img)

      Ejecute el programa y compruebe que su funcionamiento es el descrito.

      La función proporcionada por OpenCV para el dibujo de líneas (en realidad, se trataría de segmentos, ya que tienen un principio y un fin) es:

      line(imagen, punto inicial, punto final, color, grosor)

      El primer argumento de esta función es una imagen que representa el lienzo sobre el que se va a pintar la línea. El punto inicial y final son dos tuplas con las coordenadas x, y de los extremos del segmento. El color con el que se va a dibujar es otra tupla con los componentes B, G, R. El último argumento establece el grosor (en píxeles) de la línea.

      El resultado de dicha función es la imagen pasada como argumento, sobre la que se ha dibujado la línea.

      Si quisiera que la línea acabara con una punta de flecha, la función utilizada sería:

      arrowedLine(imagen, punto inicial, punto final, color, grosor)

      Como puede observar, los argumentos son los mismos de la función anterior.

      En el siguiente programa, se utiliza la función line() para dibujar una cuadrícula sobre la imagen del cuadro de la niña, cargada previamente.

Illustration

      Tras importar la librería OpenCV y cargar la imagen almacenada en el fichero “cuadro.jpg” (situado en la carpeta “imagenes”), se obtiene su alto (alto) y el ancho (ancho) utilizando su atributo shape (el número de canales no se va a utilizar).

      alto, ancho, _ = img.shape

Illustration

      Cuando un resultado no interesa, por convención se suele asignar a una variable llamada ‘_’.

      Después, se declaran las variables que establecen el color (color) y el grosor (grosor) de las líneas. También se fija el tamaño de la cuadrícula en 80 píxeles (cuadricula).

Illustration

      Luego aparecen dos bucles for. El primero pinta las líneas verticales, y el segundo, las horizontales. Para ello, en el primero se recorre el ancho y en el segundo el alto de la pantalla, a intervalos establecidos por el tamaño de la cuadrícula. En cada uno de los bucles, las líneas se dibujan con la función line().

      En el caso de las líneas verticales, la coordenada y del primer punto siempre es 0, mientras que la del segundo es el alto de la ventana. La coordenada x de ambos puntos es la misma, y fija la posición en la que se va a dibujar cada línea vertical. Para ello, toma el valor de la variable x que recorre el ancho de la pantalla en el rango de valores establecido en el primer bucle for.

Illustration

      Para dibujar las líneas horizontales, la coordenada x del punto inicial es siempre 0, mientras que la del final es el ancho de la ventana. La coordenada y (que es la misma en ambos puntos) sitúa cada línea horizontal a la altura indicada por la variable y, que recorre el alto de la pantalla según el rango de valores establecidos en el segundo bucle for.

Illustration Illustration

      En los bucles for se ha sumado uno al ancho y alto de la imagen para pintar la última línea, ya que de lo contrario quedaría excluida del rango.

      La última sentencia muestra la imagen en pantalla.

      cv2.imshow(‘cuadro’, img)

      El resultado que obtendría si ejecutara este programa lo puede ver en la siguiente imagen.

Illustration

      El siguiente programa dibuja una flecha que apunta a la niña del cuadro.

Illustration

      Dicho código no requiere explicaciones adicionales, a excepción de la sentencia arrowedLine(), utilizada para añadir una línea roja de 4 píxeles de grosor, acabada en punta de flecha, entre los puntos (200, 100) y (300, 150).

Illustration

      Cuando ejecute el programa, obtendrá como resultado la imagen mostrada a continuación.

Illustration

      La siguiente función que aprenderá a utilizar es la que permite el dibujo de rectángulos:

      rectangle(imagen, punto inicial, punto final, color, grosor)

      Los argumentos de esta función son los mismos de la anterior, solo que ahora los puntos inicial y final representan la esquina superior izquierda e inferior derecha del rectángulo. Además, si el grosor tomara el valor -1, el rectángulo se rellenaría del color del trazo.

      ¿Cómo se enmarcaría la cara de la niña del cuadro anterior? Con un programa similar al siguiente:

Illustration

      Dicho código no requiere de ningún comentario añadido, a excepción de que en la sentencia rectangle() las coordenadas se han elegido para situarlo sobre la cara de la niña. El resultado de su ejecución lo puede ver a continuación.

Illustration

      La función rectangle() se utiliza frecuentemente en combinación con técnicas de análisis de imágenes, como la de reconocimiento facial, que delimita el área donde se localiza la cara de una persona. En ese caso, será el propio algoritmo de análisis de imágenes el que calcule las coordenadas donde deberá situarse el rectángulo.

      Para pintar un círculo, la función que tiene que utilizar es:

      circle(imagen, centro, radio, color, grosor)

      En el caso de una elipse, sería:

Illustration

      En esta última función, los argumentos que requieren de una explicación adicional son los relacionados con la longitud de los ejes y los ángulos. En el primer caso, esta se expresa como una tupla cuyo primer valor corresponde al eje mayor, y el segundo, al menor, dado en píxeles. Respecto al ángulo, hace referencia al arco de la elipse que se va a pintar. Si esta fuera de 360 grados, se dibujaría completa, 180 grados correspondería a la mitad, etc. El ángulo inicial sería por el que empezaría a pintarse dicho arco, y el final, en el que acabaría.

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