Преобразование между последовательностями изображений и видео

Преобразуйте между видеофайлами и последовательностями файлов изображений с помощью VideoReader и VideoWriter.

Файл примера под названием shuttle.avi содержит 121 кадр. Преобразуйте кадры в файлы изображений с помощью VideoReader и функции imwrite. Затем преобразуйте файлы изображений в файл AVI с помощью VideoWriter.

Настройка

Создайте временную рабочую папку, чтобы сохранить последовательность изображений.

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

Создание VideoReader

Создайте VideoReader, чтобы использовать для рамок считывания из файла.

shuttleVideo = VideoReader('shuttle.avi');

Создание последовательности изображений

Цикл через видео, читая каждый кадр в ширину высотой 3 массивами под названием img. Выпишите каждое изображение к файлу JPEG с именем в форме imgN.jpg, где N является номером кадра.

| 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

Нахождение имен файла образа

Найдите все имена файлов JPEG в папке images. Преобразуйте набор названий картинки к массиву ячеек.

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

Создание нового видео с последовательностью изображений

Создайте объект VideoWriter, который создает файл Motion JPEG AVI по умолчанию.

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

Цикл через последовательность изображений, загрузите каждое изображение, и затем запишите его в видео.

for ii = 1:length(imageNames)
   img = imread(fullfile(workingDir,'images',imageNames{ii}));
   writeVideo(outputVideo,img)
end

Завершите видеофайл.

close(outputVideo)

Смотрение итогового видео

Создайте объект читателя.

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

Создайте struct фильма MATLAB из кадров видео.

ii = 1;
while hasFrame(shuttleAvi)
   mov(ii) = im2frame(readFrame(shuttleAvi));
   ii = ii+1;
end

Измените размер текущей фигуры и осей на основе ширины и высоты видео, и просмотрите первый кадр фильма.

figure 
imshow(mov(1).cdata, 'Border', 'tight')

Воспроизведите фильм однажды в частоте кадров видео.

movie(mov,1,shuttleAvi.FrameRate)

Кредиты

Видео любезности Шаттла НАСА.