Convertir entre secuencias de imágenes y vídeo
Convierta entre archivos de vídeo y secuencias de archivos de imagen mediante VideoReader
y VideoWriter
.
El archivo de muestra llamado shuttle.avi
contiene 121 fotogramas. Convierta los fotogramas a archivos de imagen mediante VideoReader
y la función imwrite
. Después, convierta los archivos de imagen a un archivo AVI mediante VideoWriter
.
Configuración
Cree una carpeta de trabajo temporal para almacenar la secuencia de imágenes.
workingDir = tempname;
mkdir(workingDir)
mkdir(workingDir,'images')
Crear un VideoReader
Cree un VideoReader
para leer los fotogramas del archivo.
shuttleVideo = VideoReader('shuttle.avi');
Crear la secuencia de imágenes
Recorra el vídeo leyendo cada fotograma en un arreglo de ancho por alto por 3 llamado img
. Escriba cada imagen en un archivo JPEG con un nombre con el formato imgN.jpg
, en el que N es el número de fotogramas.
| img001.jpg|
| img002.jpg|
| ...|
| img121.jpg|
ii = 1; while hasFrame(shuttleVideo) img = readFrame(shuttleVideo); filename = [sprintf('%03d',ii) '.jpg']; fullname = fullfile(workingDir,'images',filename); imwrite(img,fullname) % Write out to a JPEG file (img1.jpg, img2.jpg, etc.) ii = ii+1; end
Encontrar nombres de archivos de imagen
Encuentre todos los nombres de archivos JPEG de la carpeta images
. Convierta el conjunto de nombres de imagen a un arreglo de celdas.
imageNames = dir(fullfile(workingDir,'images','*.jpg')); imageNames = {imageNames.name}';
Crear nuevos vídeos con la secuencia de imágenes
Construya un objeto VideoWriter
, que crea un archivo AVI Motion-JPEG de forma predeterminada.
outputVideo = VideoWriter(fullfile(workingDir,'shuttle_out.avi'));
outputVideo.FrameRate = shuttleVideo.FrameRate;
open(outputVideo)
Recorra la secuencia de imágenes, cargue cada imagen y luego escríbala en el vídeo.
for ii = 1:length(imageNames) img = imread(fullfile(workingDir,'images',imageNames{ii})); writeVideo(outputVideo,img) end
Finalice el archivo de vídeo.
close(outputVideo)
Ver el vídeo final
Construya un objeto de lector.
shuttleAvi = VideoReader(fullfile(workingDir,'shuttle_out.avi'));
Cree una estructura de película de MATLAB® a partir de los fotogramas del vídeo.
ii = 1; while hasFrame(shuttleAvi) mov(ii) = im2frame(readFrame(shuttleAvi)); ii = ii+1; end
Cambie el tamaño de la figura y los ejes actuales según el ancho y el alto del vídeo y vea el primer fotograma de la película.
figure imshow(mov(1).cdata, 'Border', 'tight')
Reproduzca la película una vez a la velocidad de fotogramas del vídeo.
movie(mov,1,shuttleAvi.FrameRate)
Créditos
Vídeo del transbordador espacial cortesía de la NASA.