Extraer fotogramas de video usando MATLAB
Este tutorial discutirá la extracción de fotogramas de un video usando la función read()
en Matlab.
Extraer fotogramas de un video usando la función read()
en MATLAB
Un video se compone de muchos fotogramas. En otras palabras, está compuesto por imágenes, por lo que cuando las imágenes o los fotogramas se repiten una tras otra, veremos un video en reproducción. Por ejemplo, suponga que un video se compone de 60 cuadros por segundo, lo que significa que habrá 60 cuadros en un solo segundo. Los fotogramas cambian tan rápido que solo vemos un video en reproducción. Primero que nada, necesitamos leer el video en Matlab usando la función VideoReader()
. Después de eso, necesitamos encontrar el número total de cuadros presentes en el video usando la propiedad NumberOfFrames
. Usaremos un bucle for, que comenzará desde 1 y terminará en el número máximo de fotogramas en el video. Ahora encontraremos cada fotograma presente en el video y los mostraremos en un gráfico usando la función subplot()
e imshow()
. Por ejemplo, leamos un video y extraigamos todos sus fotogramas en Matlab. Vea el código a continuación.
v = VideoReader('bon_fire_dog_2.mp4');
totalFrames = v.NumberOfFrames;
NFP = ceil(sqrt(totalFrames));
for i=1:totalFrames
frame = read(v,i);
subplot(NFP,NFP,i)
imshow(frame)
end
Producción:
En el código anterior, la variable NPF
establece el número de filas y columnas en la figura anterior. También podemos guardar cada fotograma como una imagen dentro de una carpeta usando la función imwrite()
. Vea el código a continuación.
v = VideoReader('bon_fire_dog_2.mp4');
totalFrames = v.NumberOfFrames;
NFP = ceil(sqrt(totalFrames));
for i=1:totalFrames
frame = read(v,i);
ImgName = strcat(int2str(i),'.png');
imwrite(frame, ImgName);
end
El código anterior guardará todos los fotogramas presentes en el video como imágenes con formato de archivo .png
dentro del mismo directorio que el archivo de script. También puede cambiar el nombre del archivo y la extensión del archivo de la imagen. Si no desea extraer todos los fotogramas del video y desea extraer solo el primer fotograma del video. Para hacer eso, tienes que cambiar el segundo argumento de la función read()
a 1 como read(v,1)
. Si desea extraer el último fotograma del video, debe cambiar el segundo argumento a inf
como read(v,inf)
. Si desea extraer un rango específico de fotogramas del video, debe cambiar el segundo argumento a vector. Por ejemplo, puede utilizar la función read(v,[5 10])
para leer los fotogramas del 5 al 10 del vídeo v
.