Características de la GUI de OpenCV en Python

Manav Narula 15 febrero 2024
  1. Leer y escribir imágenes usando OpenCV en Python
  2. Dibujar en imágenes usando OpenCV en Python
  3. Paleta de colores con barra de seguimiento usando OpenCV en Python
  4. Conclusión
Características de la GUI de OpenCV en Python

GUI significa Interfaz gráfica de usuario, que permite al usuario interactuar con un programa utilizando dispositivos de hardware como un teclado y un mouse. GUI proporciona una interfaz visualmente atractiva que es relativamente fácil de usar.

La biblioteca opencv implementa varias funciones y objetos que pueden aplicar diferentes técnicas para procesar imágenes. Podemos leer y procesar imágenes de manera muy eficiente usando esta biblioteca.

Este tutorial demostrará diferentes técnicas de GUI utilizando la biblioteca opencv de Python.

Leer y escribir imágenes usando OpenCV en Python

Las técnicas GUI más básicas están asociadas con la lectura y visualización de imágenes. La biblioteca opencv crea una ventana para mostrar una imagen utilizando la función imshow().

Podemos leer la imagen de antemano usando la función imread() e incluso guardarla en alguna ruta específica usando el método imwrite().

El intérprete de Python intenta cerrar la ventana creada tan pronto como se ejecuta el programa, y ​​podemos evitar esto usando la función waitKey(). Esta función espera que el usuario presione alguna tecla y luego reanuda la ejecución del programa.

Podemos usar la función destroyAllWindows() para cerrar las ventanas según los requisitos del usuario. Veamos un ejemplo de trabajo.

Ejemplo de código:

import cv2

img = cv2.imread("obj.png")
cv2.imshow("Show image", img)

cv2.waitKey(0)
cv2.destroyAllWindows()

cv2.imwrite("Newimage.png", img)

Producción :

True

leer y escribir imágenes usando opencv gui en python

El código lee una imagen usando la función imread() y la muestra usando la función imshow(). Luego esperamos a que el usuario presione alguna tecla antes de reanudar la ejecución.

Después de presionar una tecla, la ventana creada se cierra. Luego, la función imwrite() procede a guardar la imagen dada en la ruta especificada.

Tenga en cuenta que también especificamos el nombre del archivo y su formato dentro de la función. La función devuelve True, que especifica que el archivo se escribió correctamente.

Dibujar en imágenes usando OpenCV en Python

La librería opencv también proporciona funciones para dibujar sobre las imágenes. Podemos dibujar diferentes formas en una imagen usando funciones como line(), rectangle(), circle(), y más.

Podemos dibujar estas formas en la imagen que leímos antes.

Ejemplo de código:

import cv2

img = cv2.imread("obj.png")

cv2.line(img, (0, 0), (511, 511), (255, 0, 0), 5)
cv2.rectangle(img, (400, 0), (510, 128), (255, 255, 0), 3)
cv2.imshow("Show image", img)

cv2.waitKey(0)
cv2.destroyAllWindows()

cv2.imwrite("Newimage.png", img)

Producción :

True

Dibujar en imágenes usando OpenCV en Python

En el ejemplo anterior, agregamos una línea y un rectángulo a la imagen de entrada y luego la guardamos en algún lugar.

La función line() añade la línea a la imagen. Especificamos las coordenadas de inicio y finalización de la línea junto con el grosor y el código de color.

La función rectángulo() crea un rectángulo. Esta función especifica las coordenadas inferior derecha y superior izquierda junto con el código de color y el grosor.

Después de dibujar la imagen, la exportamos al dispositivo usando la función imwrite().

También podemos usar el mouse como un pincel y agregar formas o líneas donde deseemos en la imagen dada. Como se discutió anteriormente, la biblioteca opencv tiene funciones que pueden leer y detectar la entrada del usuario, como la función waitKey().

Esta biblioteca almacena diferentes eventos, como hacer clic con el botón izquierdo del mouse, hacer clic con el botón derecho del mouse y muchos más. Podemos esperar a que el usuario realice algunos eventos y luego llamar a una función basada en el evento.

Primero, necesitamos crear una ventana usando el método namedWindow() y asignarle un título a esta ventana. El setMouseCallback() maneja los eventos del mouse en alguna ventana específica.

Podemos especificar el título de la ventana dentro de la función. También necesitamos especificar una función que necesita ser ejecutada.

Ejemplo de código:

import cv2


def add_circle(e, x, y, flags, param):
    if e == cv2.EVENT_LBUTTONDBLCLK:
        cv2.circle(img, (x, y), 25, (0, 0, 255), -1)


img = cv2.imread("obj.png")
cv2.namedWindow("Draw")
cv2.setMouseCallback("Draw", add_circle)

while True:
    cv2.imshow("Draw", img)
    if cv2.waitKey(20) & 0xFF == 27:
        break
cv2.destroyAllWindows()

Producción:

Dibuja formas (círculo) en la imagen usando opencv python

Entendamos el código en el ejemplo anterior. Primero, leemos una imagen y creamos una ventana usando la función namedWindow().

Creamos una función add_circle() que acepta el evento, las coordenadas, las banderas y otros parámetros. Comprobamos si el evento es el mismo con un doble clic del botón izquierdo del ratón (cv2.EVENT_LBUTTONDBLCLK).

Cuando se hace doble clic con el mouse en la ventana, la condición es True, y pasamos las coordenadas a la función circle() que crea un círculo en la posición del clic del mouse. Creamos un ciclo que ejecuta esto en repetición.

Se debe presionar la tecla Escape para salir del bucle. La función waitKey() detecta la tecla pulsada.

Paleta de colores con barra de seguimiento usando OpenCV en Python

Pasemos a técnicas GUI más complicadas usando opencv en Python. Esto se entenderá mejor usando una pantalla negra.

Crearemos una matriz numpy de tres dimensiones para esto, y esta matriz se llenará con ceros y servirá como una pantalla negra. Luego crearemos una ventana para esta imagen usando el método namedWindow() como lo hicimos en los ejemplos anteriores.

Ahora necesitamos crear las barras de seguimiento. Controlaremos la paleta de colores de esta pantalla negra cambiando sus valores RGB usando las barras de seguimiento.

Para crear las barras de seguimiento, usamos la función createTrackbar(). Este método creará una barra de seguimiento, la adjuntará a la ventana provista y especificará el objeto de imagen y el rango de la barra de seguimiento dentro de la función.

En nuestro caso, el rango será de 0 a 255. También toma un parámetro OnChange que contiene una función que debe llamarse cada vez que cambia la posición del control deslizante.

No necesitamos una función para realizar ninguna operación cuando se altera la posición. Por lo tanto, crearemos una función que no realice ninguna operación y que sólo contenga una sentencia pass.

Crearemos un bucle que se ejecuta hasta que se presiona una tecla específica. En este bucle, obtendremos la posición actual del control deslizante utilizando la posición getTrackbarPos() y estableceremos los valores RBG de esta imagen en función de la posición del rastreador.

Ejemplo de código:

import cv2
import numpy as np


def ignore(x):
    pass


img = np.zeros((512, 512, 3), np.uint8)
cv2.namedWindow("rgb_palette")

cv2.createTrackbar("R", "rgb_palette", 0, 255, ignore)
cv2.createTrackbar("G", "rgb_palette", 0, 255, ignore)
cv2.createTrackbar("B", "rgb_palette", 0, 255, ignore)

while True:
    cv2.imshow("rgb_palette", img)
    c = cv2.waitKey(1) & 0xFF
    if c == 27:
        break

    R = cv2.getTrackbarPos("R", "rgb_palette")
    G = cv2.getTrackbarPos("G", "rgb_palette")
    B = cv2.getTrackbarPos("B", "rgb_palette")

    img[:] = [B, G, R]

cv2.destroyAllWindows()

Paleta de colores con barra de seguimiento usando OpenCV en Python

En el ejemplo anterior, creamos una paleta de colores RGB utilizando opencv en Python. Creamos tres barras de seguimiento para los valores rojo, verde y azul.

Cambiamos sus valores en el control deslizante, que se refleja en la imagen (pantalla negra). Para salir del bucle, podemos presionar la tecla Escape usando la función waitKey() para detectar la tecla presionada.

Conclusión

Este tutorial demostró las diversas técnicas y características de GUI asociadas con la biblioteca opencv de Python. Demostramos estas técnicas en detalle.

La lectura y escritura de imágenes utilizando la biblioteca opencv puede considerarse la función GUI más simple, ya que la imagen se muestra en una ventana recién creada. También podemos exportar esta imagen y guardarla en el dispositivo.

Luego, discutimos cómo dibujar formas y líneas en una imagen usando opencv. Discutimos las funciones que se pueden usar para dibujar estas formas y agregamos más funciones de GUI agregando interacción del usuario y dibujando formas con clics del mouse.

En la característica final de la GUI, demostramos el uso de las barras de seguimiento. Estos son controles deslizantes que el usuario puede modificar.

Creamos una barra de seguimiento de paleta de colores RGB. Se cambian los valores, y observamos los cambios en la pantalla.

Manav Narula avatar Manav Narula avatar

Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.

LinkedIn

Artículo relacionado - Python OpenCV