Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Convertir entre secuencias de imágenes y vídeo

Convierta entre archivos de vídeo y secuencias de archivos de imagen utilizando y.VideoReaderVideoWriter

El archivo de ejemplo denominado contiene 121 fotogramas.shuttle.avi Convierta los fotogramas en archivos de imagen utilizando y la función.VideoReaderimwrite A continuación, convierta los archivos de imagen a un archivo AVI utilizando.VideoWriter

Configuración

Cree una carpeta de trabajo temporal para almacenar la secuencia de imágenes.

workingDir = tempname; mkdir(workingDir) mkdir(workingDir,'images')

Crear VideoReader

Cree una para usar para leer fotogramas del archivo.VideoReader

shuttleVideo = VideoReader('shuttle.avi');

Cree la secuencia de imágenes

Recorra el vídeo, leyendo cada fotograma en una matriz de width-by-height-by-3 nombrada.img Escriba cada imagen en un archivo JPEG con un nombre en el formulario, donde N es el número de fotograma.imgN.jpg

| 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

Buscar nombres de archivo de imagen

Busque todos los nombres de archivo JPEG en la carpeta.images Convierta el conjunto de nombres de imagen en una matriz de celdas.

imageNames = dir(fullfile(workingDir,'images','*.jpg')); imageNames = {imageNames.name}';

Crear nuevo vídeo con la secuencia de imágenes

Construya un objeto, que crea un archivo Motion-JPEG AVI de forma predeterminada.VideoWriter

outputVideo = VideoWriter(fullfile(workingDir,'shuttle_out.avi')); outputVideo.FrameRate = shuttleVideo.FrameRate; open(outputVideo)

Recorra la secuencia de imágenes, cargue cada imagen y, a continuación, escríbelo 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 video final

Construya un objeto lector.

shuttleAvi = VideoReader(fullfile(workingDir,'shuttle_out.avi'));

Cree una estructura de película de MATLAB a partir de los fotogramas de 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 en función del ancho y el alto del vídeo y visualice 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

Video del transbordador espacial por cortesía de la NASA.