exponenta event banner

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

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

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

Установка

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

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

Создать VideyReader

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

shuttleVideo = VideoReader('shuttle.avi');

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

Закольцовывать видео, считывая каждый кадр в массив width-by-height-by-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)

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

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

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

Создайте структуру фильма 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.

Кредиты

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