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

Преобразуйте между видеофайлами и последовательностями файлов изображений с помощью 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)

Figure contains an axes object. The axes object contains an object of type image.

Кредиты

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