Преобразование между видеофайлами и последовательностями файлов изображений с помощью VideoReader и VideoWriter.
Образец файла с именем shuttle.avi содержит 121 кадр. Преобразование кадров в файлы изображений с помощью VideoReader и imwrite функция. Затем преобразуйте файлы изображений в AVI-файл с помощью VideoWriter.
Создайте временную рабочую папку для хранения последовательности изображений.
workingDir = tempname;
mkdir(workingDir)
mkdir(workingDir,'images')Создать 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)

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