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

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

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

Setup

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

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

Создание VideoReader

Создайте VideoReader для чтения систем координат из файла.

shuttleVideo = VideoReader('shuttle.avi');

Создайте Image Sequence

Цикл через видео, считывая каждую систему координат в массив шириной по высоте по 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}';

Создайте новое видео с Image Sequence

Создайте 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)

Просмотр финального видео

Создайте объект reader.

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. The axes contains an object of type image.

Кредиты

Видео космического шаттла предоставлено НАСА.