Curso
OpenCV, la Open Source Computer Vision Library, es una potente biblioteca de código abierto muy utilizada en proyectos de visión por computador. OpenCV está pensada para ofrecer un marco integrado de visión en tiempo real y sirve como plataforma que facilita numerosas aplicaciones de análisis de imágenes y vídeo.
La biblioteca OpenCV desempeña un papel clave al permitir que desarrolladores e investigadores aprovechen las ventajas del procesamiento de datos visuales. Sus capacidades abarcan múltiples aplicaciones, desde el procesamiento básico de imágenes hasta tareas más complejas como la identificación de objetos y el reconocimiento facial. Al ofrecer una amplia colección de algoritmos, métodos y operaciones de procesamiento de datos de imagen, OpenCV facilita el desarrollo de sistemas inteligentes capaces de reconocer y clasificar contenido visual.
Una de las aplicaciones más destacadas de OpenCV es el reconocimiento de objetos, donde sus algoritmos permiten identificar y localizar objetos dentro de imágenes o secuencias de vídeo. Esta capacidad se extiende también a otras tareas de visión por computador, como el reconocimiento facial, el seguimiento de movimiento y el soporte a tecnologías de realidad aumentada.
En este artículo, veremos:
- Funciones de procesamiento de imágenes que habilita la biblioteca OpenCV
- Cómo instalar la biblioteca OpenCV en un entorno de Python
- Un repaso a técnicas de procesamiento de imágenes y cómo implementarlas en OpenCV
- Técnicas de procesamiento de vídeo con OpenCV
Instalación de OpenCV
Requisitos previos
Para seguir este tutorial de OpenCV, necesitas un nivel intermedio de Python y nociones básicas de visión por computador. Estar familiarizado con los principios del procesamiento de imágenes también te ayudará a sacar más partido al tutorial, aunque definimos los conceptos clave cuando aparecen.
Pasos de instalación
- Instalación de Python: Asegúrate de tener Python instalado en tu sistema. Puedes descargar la última versión desde el sitio web oficial de Python.
- Entorno y gestor de paquetes (opcional): Puedes usar gestores como Anaconda para simplificar la gestión de bibliotecas. Descarga e instala Anaconda desde su web oficial.
- Instalación de OpenCV: Abre una consola o terminal y usa este comando para instalar OpenCV con pip (el instalador de paquetes de Python):
!pip install opencv-python
Si usas Anaconda, puedes ejecutar este comando:
!conda install -c conda-forge opencv
Verificación
Para confirmar que la instalación se ha completado correctamente, ejecuta el siguiente código en un intérprete de Python o en un Jupyter Notebook:
import cv2
print(cv2.__version__)
Si todo ha ido bien, verás en pantalla el número de versión de la biblioteca OpenCV instalada. Si no aparece ningún número, significa que la instalación no se ha realizado con éxito.
Nota importante si usas Google Colab: Para mostrar imágenes en notebooks de Google Colab, es necesario sustituir la función tradicional cv2.imshow por cv2_imshow, que proporcionan las bibliotecas específicas de Colab. Este ajuste garantiza la compatibilidad con el entorno Colab, que no admite cv2.imshow. Para aplicarlo, importa la función cv2_imshow desde los patches de Google Colab como sigue:
from google.colab.patches import cv2_imshow
# Mostrar una imagen en una ventana
cv2_imshow(image)
Introducción a las funciones de OpenCV
Cargar y mostrar una imagen en OpenCV
El siguiente fragmento de código es el punto de partida para usar la biblioteca OpenCV en el procesamiento de imágenes. Cargar una imagen en el entorno de desarrollo es habitual en múltiples contextos, desde proyectos sencillos de visión por computador hasta aplicaciones complejas de detección de objetos en tiempo real en producción. Mostrar una imagen también es clave para observar su contenido o el resultado del procesamiento. En el código de abajo, leemos un JPG desde un archivo y lo mostramos con la biblioteca OpenCV.
Puedes usar este fragmento para cargar y mostrar imágenes en OpenCV:
import cv2
# Cargar una imagen desde archivo
image = cv2.imread('your/image/path.jpg')
# Mostrar la imagen en una ventana
cv2.imshow('Image', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

Personas de oficina alrededor de un portátil. Fuente: Canva
En este código, la imagen se lee desde un archivo con «cv2.imread» y luego se muestra en una ventana con «imshow». La función «cv2.waitKey(0)» mantiene la ventana abierta hasta que el usuario la cierre pulsando una tecla.
El procesamiento de imágenes consiste en manipular los datos de los píxeles de forma que se modifica la apariencia visual de la imagen original, ya sea para extraer características, analizar la imagen u otras tareas de visión por computador. Entre las técnicas habituales están el procesamiento de color, el filtrado, la segmentación, la detección de bordes, etc.
El siguiente fragmento aplica una técnica sencilla de procesamiento sobre la imagen cargada previamente. En concreto, realiza una conversión a escala de grises. Convertir a escala de grises es una técnica fundamental que reduce la imagen a un único canal de valores de intensidad.
# Convertir una imagen a escala de grises
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# Mostrar la imagen en escala de grises
cv2.imshow('Gray Image', gray_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
Aquí, cv2.cvtColor() convierte la imagen cargada a escala de grises.

Personas de oficina alrededor de un portátil (escala de grises). Fuente: Canva
Detección de bordes
La detección de bordes es una técnica clave en el procesamiento de imágenes y la visión por computador. Identifica puntos de una imagen donde el brillo cambia bruscamente o presenta discontinuidades. Detectar bordes es esencial en visión por computador, especialmente al localizar rasgos dentro de los datos de imagen. En general, funciona detectando cambios bruscos en la intensidad de los píxeles. Al unir estos puntos de cambio de brillo, se forman líneas y bordes que delinean los objetos de la imagen.
Con algoritmos de detección de bordes se pueden captar detalles texturales y estructurales minúsculos de los objetos en una imagen.
Existen varios algoritmos de detección de bordes, como el detector de Canny, el método de Sobel y el método de lógica difusa, empleados en reconocimiento de objetos, segmentación de imágenes y extracción de características. El siguiente código muestra una detección básica de bordes con OpenCV:
# Aplicar la detección de bordes de Canny (método sencillo de detección)
edges = cv2.Canny(gray_image, 50, 150)
# Mostrar la imagen con bordes
cv2.imshow('Edges', edges)
cv2.waitKey(0)
cv2.destroyAllWindows()
El algoritmo de Canny está disponible en OpenCV mediante la función «cv2.Canny()», que detecta los bordes de los objetos sobre la imagen en escala de grises.

Personas de oficina alrededor de un portátil (escala de grises). Fuente: Canva
Redimensionar y rotar imágenes
Redimensionar y rotar imágenes es fundamental para adaptar y transformar contenido visual. Redimensionar consiste en cambiar sus dimensiones, ya sea ampliando o reduciendo, y es esencial para escalar y ubicar imágenes en contextos concretos.
Rotar implica ajustar el ángulo con el que se observa una imagen según un valor de rotación especificado. Ambas operaciones suelen aplicarse como pasos de preprocesado para fines de visión por computador, aprendizaje automático y gráficos. Por ejemplo, al entrenar redes neuronales profundas, rotar y redimensionar imágenes son técnicas de aumento de datos que aumentan la variabilidad del conjunto de entrenamiento. El objetivo es que la red vea suficiente diversidad para generalizar bien a datos no vistos.
Para redimensionar y rotar imágenes con OpenCV, puedes usar el siguiente código:
# Redimensionar la imagen
resized_image = cv2.resize(image, (width, height))
# Rotar la imagen 45 grados
rotation_matrix = cv2.getRotationMatrix2D((width / 2, height / 2), 45, 1)
rotated_image = cv2.warpAffine(resized_image, rotation_matrix, (width, height))
# Mostrar las imágenes redimensionada y rotada
cv2.imshow('Resized Image', resized_image)
cv2.imshow('Rotated Image', rotated_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
Mientras que «cv2.resize» se usa para cambiar el tamaño, cv2.getRotationMatrix2D junto con «cv2.warpAffine» se usan para rotar la imagen.

Personas de oficina alrededor de un portátil (rotada). Fuente: Canva
Cargar y procesar vídeos
Un vídeo es una secuencia de imágenes presentadas de forma consecutiva. En visión por computador, el procesamiento de vídeo es esencial para crear aplicaciones que trabajen con datos en tiempo real o grabados. A diferencia de las imágenes estáticas, el vídeo incorpora una dimensión temporal que permite analizar movimiento, cambios en el tiempo y extraer patrones temporales.
La naturaleza dinámica del contenido en vídeo exige técnicas eficientes, sobre todo en sistemas críticos, como vigilancia, conducción autónoma, reconocimiento de actividades y muchos más, donde comprender el movimiento y el cambio es clave.
Una gran ventaja de usar OpenCV en tareas de vídeo es que ofrece un conjunto completo de funciones para manejar flujos de vídeo con eficiencia. OpenCV proporciona herramientas de captura, procesamiento y análisis de vídeo, igual que hace con las imágenes.
El siguiente fragmento permite cargar y procesar un vídeo almacenado localmente:
import cv2
# Abrir un objeto de captura de vídeo
cap = cv2.VideoCapture("Your video's path.mp4")
# Comprobar si el vídeo se ha abierto correctamente
if not cap.isOpened():
print("Error: Couldnot open the video.")
exit()
# Recorrer los fotogramas del vídeo
while True:
# Leer un fotograma del vídeo
ret, frame = cap.read()
# Romper el bucle si el vídeo ha terminado
if not ret:
break
# Mostrar el fotograma original
cv2.imshow('Original Video', frame)
gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
cv2.imshow('Black and White Video', gray_frame)
# Realizar detección de bordes en el vídeo
edges_frame = cv2.Canny(gray_frame, 50, 150)
cv2.imshow('Edges Video', edges_frame)
# Salir del bucle si se pulsa la tecla 'q'
if cv2.waitKey(25) & 0xFF == ord('q'):
break
# Liberar el objeto de captura y cerrar todas las ventanas
cap.release()
cv2.destroyAllWindows()
En este código, la clase «cv2.VideoCapture» se usa para acceder a un archivo de vídeo y leer fotogramas mediante su método «cap.read». Primero muestra el vídeo original, luego lo convierte a blanco y negro y, por último, aplica detección de bordes a cada fotograma. El bucle se ejecuta hasta que se acaban los fotogramas o hasta que se recibe la orden de salir con el teclado. «cv2.waitKey(25)» introduce una pequeña pausa entre fotogramas para mostrarlos con una reproducción fluida.
Detección de personas con OpenCV y YOLO
Detección de objetos y de personas
La detección de objetos es una tarea fundamental de visión por computador que busca detectar y localizar objetos en una imagen o vídeo y proporcionar un resultado de reconocimiento: una lista de etiquetas de clase detectadas y sus cajas delimitadoras. La detección de personas, una variante del reconocimiento de objetos, se centra en identificar y localizar personas dentro de la información visual.
Aplicaciones de la detección de personas
Entre las aplicaciones están la vigilancia, la gestión de multitudes, el conteo y seguimiento de personas, la interacción humano-computadora y los entornos inteligentes. En vigilancia ayuda a detectar actividades sospechosas; en la gestión de multitudes, a reconocer gestos y realizar seguimiento. La detección de personas es clave en la interacción humano-computadora y se emplea en entornos inteligentes para optimizar recursos y mejorar la seguridad.
Modelo de detección de objetos YOLO
YOLO, acrónimo de "You Only Look Once", se ha consolidado como un sistema muy extendido que logra un reconocimiento de objetos en tiempo real de forma eficiente. A diferencia de los métodos clásicos, YOLO divide la imagen en una cuadrícula de celdas y predice simultáneamente cajas delimitadoras y probabilidades de clase para cada celda.
Puedes leer más sobre la detección de objetos con YOLO en nuestra guía completa.
Detección de personas en una imagen
A continuación, un ejemplo con OpenCV y YOLO para detectar personas en una imagen:
import cv2
net = cv2.dnn.readNet('yolov3.weights', 'yolov3.cfg')
layer_names = net.getUnconnectedOutLayersNames()
image = cv2.imread('image path.jpg')
height, width = image.shape[:2]
blob = cv2.dnn.blobFromImage(image, 1/255.0, (416, 416), swapRB=True, crop=False)
net.setInput(blob)
outs = net.forward(layer_names)
for out in outs:
for detection in out:
scores = detection[5:]
class_id = np.argmax(scores)
confidence = scores[class_id]
if confidence > 0.5 and class_id == 0: # Class ID for person
box = detection[:4] * np.array([width, height, width, height])
(x, y, w, h) = box.astype(int)
cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2)
cv2.imshow('Person Detection', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
Detección de personas en vídeo
De forma similar, la estructura del código sigue los mismos principios para detectar personas en un vídeo. En lugar de procesar una imagen estática, el script o la aplicación procesan fotograma a fotograma.
El mismo principio rige la identificación de personas en imágenes y en clips de vídeo, con la principal diferencia del factor tiempo. En imágenes, la tarea consiste en reconocer y posicionar personas en un único fotograma estático.
Esta aplicación es especialmente útil para instantáneas de vigilancia y otras fotografías no superpuestas. En cambio, en vídeo el objetivo es identificar y seguir a las personas a medida que se mueven entre fotogramas sucesivos. Esto a veces se denomina seguimiento de objetos en vídeo. El aspecto temporal es crucial al considerar movimientos e interacciones humanas a lo largo del tiempo, lo que convierte la detección de personas basada en vídeo en una herramienta vital para aplicaciones en tiempo real, como la seguridad, el control de multitudes y el análisis de comportamiento.
Aplicaciones reales y consideraciones éticas
Otros casos de uso incluyen ciudades inteligentes, analítica en retail y seguridad pública. No obstante, existen consideraciones éticas relacionadas con la privacidad, el consentimiento y el posible uso indebido de la tecnología. Un despliegue responsable en distintos ámbitos requiere equilibrar los beneficios con estas preocupaciones.
Conclusión
Este tutorial ha mostrado los aspectos fundamentales de trabajar con la biblioteca OpenCV en diversas tareas de visión por computador. Empezando por lo básico, has visto cómo instalar OpenCV en un entorno de Python. También hemos repasado operaciones de OpenCV para cargar y mostrar imágenes, junto con técnicas de procesamiento como la conversión a escala de grises y la detección de bordes. En conjunto, queda claro que OpenCV permite realizar transformaciones y análisis sofisticados, incluyendo la aplicación de técnicas de procesamiento a fotogramas de vídeo.
En particular, OpenCV desempeña un papel crucial en la visión por computador aplicada gracias a su versatilidad y robustez, lo que permite a ingenieros de visión por computador y profesionales de machine learning abordar muchos retos relacionados con el procesamiento de datos visuales. La gran ventaja de usar la biblioteca OpenCV es que agiliza la aplicación de algoritmos de visión por computador y convierte con eficiencia los conceptos en implementaciones prácticas.
Refuerza tu comprensión de los conceptos tratados en este artículo profundizando en el procesamiento de imágenes en Python con un curso cuidadosamente diseñado. Ampliarás tu caja de herramientas para procesamiento de imágenes y visión por computador con bibliotecas adicionales como Sci-kit Image y Numpy.
Creador de contenidos de aprendizaje automático con más de 1M de visitas- Ingeniero de Visión Artificial. Interesado en adquirir y compartir conocimientos sobre Tecnología y Finanzas


