OMES

Cómo leer y visualizar un video con OpenCV en Python | Minicurso OpenCV – Parte 5

Bienvenidos al quinto artículo del minicurso de Visión por Computador con OpenCV en Python. En el artículo anterior vimos como leer una imagen, así que pasaremos a la lectura y visualización de un video, ya sea desde un archivo o desde la webcam, así que ¡vamos con el código!

¿Qué aprenderás en este artículo?

¿Qué es un video para OpenCV?

Un video no es más que una secuencia de imágenes a las que llamamos frames, que se muestran una tras otra a cierta velocidad.

OpenCV se encarga de leer un frame, procesarlo, pasar al siguiente y así sucesivamente.

¿Cómo leer y visualizar un video desde disco (archivo) con OpenCV?

El video a leer en este artículo tiene como nombre video.mp4, pero puedes leer otros videos en distintos formatos también (.mp4, .avi, .mkv o .mov), todo dependerá de que el códec del video sea compatible con la versión de OpenCV y con los códecs instalados en tu sistema operativo.

Bien, ahora ¡vamos con el código!

import cv2

# Abrir archivo de video
cap = cv2.VideoCapture("video.mp4")

Línea 1: Importamos OpenCV con import cv2.

Línea 4: Para leer un video en OpenCV usamos la clase VideoCapture(). Esta nos permite abrir tanto archivos de video como dispositivos de captura (cámara). Entonces especificamos el nombre del video dentro de los paréntesis.

En este punto todavía no reproducimos el video, solo lo estamos abriendo y preparando para su lectura.

while True:
    ret, frame = cap.read()

    if not ret:
        break

Línea 6: Ahora tendremos que crear un ciclo de repetición infinito, que nos ayudará a leer cada una de las imágenes que componen el video.

Línea 7: Para leer cada frame nos ayudamos del método read(). Este método devuelve dos valores:
ret, valor booleano. Con True indica que sí se pudo leer el frame de forma correcta, caso contrario obtendremos False.
frame, corresponde a la imagen del frame actual.

Línea 9 y 10: Añadimos un condicional, mientras ret sea True, significa que OpenCV pudo leer correctamente un frame. Cuando el video se termina, ret pasa a ser False, y así sabemos que no hay más frames para procesar. Por lo tanto con break, salimos del ciclo de repetición infinito.

    cv2.imshow("Video de entrada", frame)

    if cv2.waitKey(30) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

Línea 12: En cada iteración leemos un frame y lo visualizamos con cv2.imshow(), como lo hicimos para leer la imagen en el artículo anterior. El primer parámetro contiene el nombre de la ventana ("Video de entrada") donde se mostrará el video, y el segundo es la variable que contiene el fotograma, frame.

Línea 14 y 15: Como se leerá un fotograma detrás de otro debemos especificar cuántos milisegundos se deben esperar hasta que se lea el siguiente fotograma. Para ello usamos cv2.waitKey(). Esta función también es capaz de capturar la tecla presionada. Esto lo usaremos para cuando se presione q minúscula, salgamos del ciclo de repetición y se cierren las ventanas de visualización.

Nota: El valor que se pasa a cv2.waitKey() representa el número de milisegundos que OpenCV espera antes de leer el siguiente frame.

Ten en cuenta que OpenCV intenta procesar el video lo más rápido posible, por lo que este valor influye directamente en la velocidad de reproducción.

Línea 17 y 18: Finalmente con cap.release(), liberamos los recursos usados para leer el video, mientras que con cv2.destroyAllWindows() cerramos las ventanas de visualización creadas.

Al ejecutar podremos ver el video visualizándose en una ventana:

Conoce más del ebook en: Introducción a la Visión por Computador con OpenCV y Python

¿Cómo leer un video desde la cámara con OpenCV?

Ahora vamos con una sección muy interesante, leer un video en tiempo real desde la cámara. Cabe destacar que solo tendremos una diferencia con el programa previo, veamos:

import cv2

# Abrir archivo de video
#cap = cv2.VideoCapture("video.mp4")
cap = cv2.VideoCapture(0, cv2.CAP_DSHOW)

while True:
    ret, frame = cap.read()

    if not ret:
        break

    cv2.imshow("Video de entrada", frame)

    if cv2.waitKey(30) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

Línea 5: Para leer un video desde la cámara, de igual manera usamos: cv2.VideoCapture(). Dentro de sus paréntesis especificamos 0, que indica que abrirá la cámara principal del equipo. Si tienes más de una cámara puedes probar con 1, 2, etc.

Nota: Si estás en Windows y notas que la cámara tarda en abrir, puedes usar otro backend de captura: cap = cv2.VideoCapture(0, cv2.CAP_DSHOW) Esto suele mejorar la velocidad de apertura en muchos casos.

Gracias por haber llegado hasta aquí. Espero que este contenido te haya sido útil. Si te quedaste con alguna duda o te gustaría que profundicemos en algún punto, puedes dejarlo en los comentarios.

Nos vemos en el siguiente artículo. 😊

Salir de la versión móvil