Empezar a trabajar con videos

OpenCVOpenCVBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

¡Bienvenido a este laboratorio sobre cómo comenzar a trabajar con videos utilizando OpenCV-Python! OpenCV (Visión por Computador de Código Abierto) es una potente biblioteca diseñada para el procesamiento de imágenes, el aprendizaje automático y las aplicaciones de visión por computador. En este laboratorio, nos centraremos en cómo trabajar con videos en OpenCV-Python.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL opencv(("OpenCV")) -.-> opencv/BasicOperationsGroup(["Basic Operations"]) opencv/BasicOperationsGroup -.-> opencv/fourcc("VideoWriter Fourcc") opencv/BasicOperationsGroup -.-> opencv/imread("Image Read") opencv/BasicOperationsGroup -.-> opencv/imwrite("Image Write") opencv/BasicOperationsGroup -.-> opencv/video_capture("VideoCapture") opencv/BasicOperationsGroup -.-> opencv/video_writer("VideoWriter") subgraph Lab Skills opencv/fourcc -.-> lab-14766{{"Empezar a trabajar con videos"}} opencv/imread -.-> lab-14766{{"Empezar a trabajar con videos"}} opencv/imwrite -.-> lab-14766{{"Empezar a trabajar con videos"}} opencv/video_capture -.-> lab-14766{{"Empezar a trabajar con videos"}} opencv/video_writer -.-> lab-14766{{"Empezar a trabajar con videos"}} end

Lectura de un video y guardado de un fotograma

Para capturar un video, necesitas crear un objeto VideoCapture. Aquí tienes un ejemplo de cómo leer un video y guardar cada fotograma en la carpeta frame:

La ruta del video es /home/labex/project/video.mp4

La ruta del archivo es /home/labex/project/read_video.py

Abre el archivo read_video.py. Luego, ingresa el siguiente código.

import cv2
import os

## Comprueba si la carpeta 'frame' existe. Créala si no existe.
folder = os.path.exists('frame')
if not folder:
	os.makedirs('frame')
	print('new folder...')
	print('OK')
else:
	print('There is this folder!')

## Número de fotograma
number = 0

## Crea un objeto VideoCapture
cap = cv2.VideoCapture('video.mp4')

while True:
    ## Lee un fotograma del video
    ret, frame = cap.read()

    ## Número de fotograma incrementado
    number = number + 1
    if ret:
        ## Guarda el fotograma
        cv2.imwrite(f"./frame/save{number}.jpg", frame)

    ## Sal del bucle
    else:
        break

print('Each frame has been saved to the frame folder')

print('Video read successfully!')

## Libera el objeto VideoCapture
cap.release()

En este ejemplo, creamos un objeto VideoCapture pasando la ruta del archivo de video que queremos leer. Luego, usamos un bucle while para leer cada fotograma del video utilizando el método read(). Si el fotograma se lee correctamente, usamos el método imwrite() para guardar el fotograma. Finalmente, liberamos el objeto VideoCapture.

Puedes ejecutar el siguiente comando en la terminal para ejecutar el código.

python /home/labex/project/read_video.py

O simplemente puedes hacer clic en el botón como esteRun Python File en la esquina superior derecha para ejecutarlo.

Después, espera a que la terminal muestre el mensaje "Video read successfully!" y verás las imágenes de cada fotograma en la carpeta frame.

Escritura y guardado de un video

Para escribir y guardar un video, necesitas crear un objeto VideoWriter. Aquí tienes un ejemplo de cómo escribir y guardar un video:

La ruta del video es /home/labex/project/video.mp4

La ruta del archivo es /home/labex/project/write_video.py

Abre el archivo write_video.py. Luego, ingresa el siguiente código.

import cv2

## Crea un objeto VideoCapture
cap = cv2.VideoCapture('video.mp4')

## Obtén el tamaño del fotograma del video y la tasa de fotogramas
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
fps = int(cap.get(cv2.CAP_PROP_FPS))

## Crea un objeto VideoWriter
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('output.avi', fourcc, fps, (width, height))

while True:
    ## Lee un fotograma del video
    ret, frame = cap.read()

    if ret:
        ## Procesa el fotograma
        #...

        ## Escribe el fotograma procesado en el video de salida
        out.write(frame)

    else:
        break

print('Video save successfully!')

## Libera los objetos VideoCapture y VideoWriter
cap.release()
out.release()

En este ejemplo, creamos un objeto VideoCapture pasando la ruta del archivo de video que se va a leer. Luego, obtenemos el tamaño del fotograma del video y la tasa de fotogramas utilizando el método get(). A continuación, creamos un objeto VideoWriter pasando el nombre del archivo de salida, el código fourcc, la tasa de fotogramas y el tamaño del fotograma. El código fourcc es un código de cuatro bytes utilizado para especificar el códec de video. En este ejemplo, utilizamos el códec XVID.

Luego, usamos un bucle while para leer cada fotograma del video utilizando el método read(). Si el fotograma se lee correctamente, lo procesamos (por ejemplo, aplicamos filtros) y lo escribimos en el video de salida utilizando el método write() del objeto VideoWriter. Finalmente, liberamos los objetos VideoCapture y VideoWriter.

Puedes ejecutar el siguiente comando en la terminal para ejecutar el código.

python /home/labex/project/write_video.py

O simplemente puedes hacer clic en el botón como esteRun Python File en la esquina superior derecha para ejecutarlo.

Después, espera a que la terminal muestre el mensaje "Video save successfully!" y verás un video de salida llamado output.avi en la carpeta del proyecto. Sin embargo, el entorno actual no admite la visualización de archivos de video. Tendrás que descargar el archivo localmente, como se muestra a continuación, y luego visualizarlo utilizando un reproductor de video.

Download Video File
Download Video File

Resumen

¡Felicidades! Ahora has aprendido cómo leer, mostrar, escribir y guardar videos utilizando OpenCV-Python. Con estas habilidades básicas, puedes comenzar a explorar técnicas y aplicaciones más avanzadas de visión por computador.

Siéntete libre de ampliar este tutorial probando diferentes formatos de video, aplicando filtros a los fotogramas o experimentando con el seguimiento y la detección de objetos. ¡Las posibilidades son infinitas!