La captura y procesamiento de imágenes es una de las tareas fundamentales en el campo de la visión artificial. OpenCV proporciona una gran cantidad de funciones y herramientas para esta tarea, lo que lo convierte en una opción ideal para el desarrollo de sistemas de visión artificial. En este post, veremos cómo utilizar OpenCV para capturar y procesar imágenes en Python.
La primera tarea es la captura de imágenes. OpenCV proporciona la función cv2.VideoCapture()
para capturar imágenes desde una cámara o un archivo de video. Esta función toma como parámetro el índice de la cámara o la ruta del archivo de video. Por ejemplo, si queremos capturar imágenes desde la cámara web predeterminada, podemos utilizar el siguiente código:
import cv2
cap = cv2.VideoCapture(0) #Cargamos webcam
Una vez que hemos creado un objeto de captura, podemos utilizar el método read()
para capturar una imagen. Este método devuelve una tupla que contiene un indicador de éxito (True o False) y la imagen ‘frame’ capturada. Por ejemplo:
while (cap.isOpened()): #Cogemos un frame
ret, frame = cap.read()
cv2.imshow('webCam',frame) #Mostramos el frame
if (cv2.waitKey(1) == ord('s')): si presionamos 's' salimos del programa
break
cap.release() #Soltamos la camara
cv2.destroyAllWindows() #Cerramos ventana
Si queremos cambiar el tamaño de la imagen, podemos utilizar la función cv2.resize()
. Esta función toma como parámetros la imagen original y el tamaño deseado. Por ejemplo, si queremos cambiar el tamaño de la imagen a un ancho de 600 píxeles y un alto de 400 píxeles, podemos utilizar el siguiente código:
# Cambiar el tamaño de la imagen
resized_frame = cv2.resize(frame, (600, 400))
Otra función importante es la de cv2.cvtColor()
que permite convertir una imagen de un espacio de color a otro. Por ejemplo, si queremos convertir una imagen a escala de grises, podemos utilizar el siguiente código:
# Convertir a escala de grises
gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
La detección de bordes es otra técnica común en el procesamiento de imágenes. OpenCV proporciona varios algoritmos para la detección de bordes, como el algoritmo Canny. Este algoritmo toma como parámetros la imagen original y los valores umbral para la detección de bordes. Por ejemplo, si queremos detectar bordes en una imagen utilizando el algoritmo Canny con umbrales de 50 y 150, podemos utilizar el siguiente código:
# Detectar bordes con Canny
edges = cv2.Canny(gray_frame, 50, 150)
Otra técnica importante es la detección de características, que permite encontrar puntos específicos en una imagen, como esquinas o puntos de interés. OpenCV proporciona varios algoritmos de detección de características, como el algoritmo de Harris y el algoritmo de Shi-Tomasi. Por ejemplo, si queremos detectar esquinas en una imagen utilizando el algoritmo de Harris, podemos utilizar el siguiente código:
# Detectar esquinas con Harris
corners = cv2.cornerHarris(gray_frame, 2, 3, 0.04)
El código completo quedaría así:
import cv2
cap = cv2.VideoCapture(0)
while (cap.isOpened()):
ret, frame = cap.read() #capturar imagen
edges = cv2.Canny(frame, 50, 150) # Detectar bordes con Canny
corners = cv2.cornerHarris(frame, 2, 3, 0.04) # Detectar esquinas con Harris
cv2.imshow('webCam',frame) #Mostramos imagen
cv2.imshow('edge', edges) #Mostramos bordes
if (cv2.waitKey(1) == ord('s')): #pulsamos s para salir
break
cap.release()
cv2.destroyAllWindows()
En resumen, OpenCV proporciona una gran cantidad de funciones y herramientas para la captura y procesamiento de imágenes. Con estas funciones, podemos realizar tareas básicas como el cambio de tamaño y la rotación, así como técnicas avanzadas como el filtrado y la detección de bordes. A medida que continuemos explorando el potencial de OpenCV, veremos cómo utilizar estas funciones para desarrollar sistemas de visión artificial más complejos y avanzados.