OpenCV es una biblioteca muy popular para el procesamiento de imágenes en proyectos de visión por computadora. Te proporcionaré una guía ampliada de algunos ejemplos básicos en Python para que puedas comprender cómo funciona esta biblioteca y cómo puedes utilizarla en tus propios proyectos.
Instalación:
Antes de comenzar, asegúrate de tener OpenCV instalado en tu entorno. Puedes hacerlo fácilmente utilizando el siguiente comando en tu terminal:
pip install opencv-python
Una vez que hayas instalado OpenCV, ¡estarás listo para comenzar con los ejemplos!
1. Cargar y mostrar una imagen:
En este primer ejemplo, aprenderás cómo cargar y mostrar una imagen utilizando OpenCV. Aquí tienes el código necesario:
import cv2
# Cargar una imagen
img = cv2.imread("ejemplo.jpg")
# Mostrar la imagen
cv2.imshow("Imagen", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
En este código, utilizamos la función cv2.imread()
para cargar una imagen llamada «ejemplo.jpg». Luego, utilizamos cv2.imshow()
para mostrar la imagen en una ventana con el título «Imagen». La función cv2.waitKey(0)
espera hasta que el usuario presione cualquier tecla antes de cerrar la ventana. Finalmente, cv2.destroyAllWindows()
cierra todas las ventanas que se han abierto.
2. Dibujar en una imagen:
En este segundo ejemplo, aprenderás cómo dibujar formas básicas en una imagen utilizando OpenCV. Aquí tienes el código:
import cv2
# Cargar una imagen
img = cv2.imread("ejemplo.jpg")
# Dibujar un rectángulo
cv2.rectangle(img, (100, 100), (200, 200), (0, 0, 255), 2)
# Mostrar la imagen
cv2.imshow("Imagen", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
En este código, utilizamos la función cv2.rectangle()
para dibujar un rectángulo en la imagen cargada. El primer argumento es la imagen en la que se dibujará, el segundo argumento son las coordenadas del vértice superior izquierdo del rectángulo, el tercer argumento son las coordenadas del vértice inferior derecho del rectángulo, el cuarto argumento es el color del rectángulo en formato BGR (en este caso, rojo), y el último argumento es el ancho de línea del rectángulo.
3. Detección de caras en una imagen:
En este último ejemplo, aprenderás cómo utilizar un clasificador de cascada Haar pre-entrenado para detectar caras en una imagen utilizando OpenCV. Aquí tienes el código:
import cv2
# Cargar una imagen
img = cv2.imread("ejemplo.jpg")
# Convertir la imagen a escala de grises
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# Cargar el clasificador de cascada Haar para detección de caras
face_cascade = cv2.CascadeClassifier("haarcascade_frontalface_default.xml")
# Detectar caras en la imagen
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.3, minNeighbors=5)
# Dibujar un rectángulo alrededor de cada cara detectada
for (x, y, w, h) in faces:
cv2.rectangle(img, (x, y), (x+w, y+h), (0, 255, 0), 2)
# Mostrar la imagen
cv2.imshow("Imagen", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
En este código, primero convertimos la imagen a escala de grises utilizando la función cv2.cvtColor()
. Luego, cargamos un clasificador de cascada Haar pre-entrenado para detección de caras utilizando la función cv2.CascadeClassifier()
.
Utilizamos la función detectMultiScale()
para detectar caras en la imagen en escala de grises. Esta función toma tres argumentos: la imagen en escala de grises, el factor de escala (que especifica cuánto se reduce la imagen en cada escala) y el número mínimo de vecinos requeridos para aceptar una detección.
La función detectMultiScale()
devuelve una lista de rectángulos que contienen las caras detectadas en la imagen. Luego, utilizamos un bucle for para dibujar un rectángulo verde alrededor de cada cara detectada utilizando la función cv2.rectangle()
.
Finalmente, mostramos la imagen con las caras detectadas en una ventana utilizando las funciones cv2.imshow()
, cv2.waitKey(0)
y cv2.destroyAllWindows()
.
Espero que esta guía ampliada te haya ayudado a comprender mejor cómo utilizar OpenCV en Python para procesamiento de imágenes y visión por computadora. ¡Experimenta con diferentes técnicas y funcionalidades de OpenCV para desarrollar proyectos aún más interesantes! Si