Создание видео таймлапса Используя постобработанные данные

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

Image Acquisition Toolbox™ дает возможность производить фотографию таймлапса. В этом примере мы будем использовать постобработку, чтобы удалить кадры из полученной последовательности изображений. Это идеально для ситуаций, где вы не уверены, какие кадры релевантны во время получения, или где ваша обработка заняла бы слишком много времени происходить во время приобретения. Возможное приложение должно было бы удалить кадры, которые не имеют никакого движения относительно предыдущего кадра. Первичный недостаток этого метода десятикратного уменьшения времени - то, что это требует, чтобы большие объемы памяти сохранили все кадры. Этот пример получает к памяти, но вы, вероятно, получили бы к файлу AVI, и затем использовали бы команду VideoReader, чтобы постобработать кадры.

См. последовательность таймлапса один день длиной. (21 секунда)

Создайте объект ввода видео

Прежде, чем получить изображения с помощью Image Acquisition Toolbox, создайте объект ввода видео.

% When executing the following code, you may need to
% modify it to match your acquisition hardware.
vid = videoinput('winvideo',1,'RGB24_352x288');

Сконфигурируйте объект ввода видео

Настройка, которую мы будем использовать,

  • Получите 100 кадров

vid.FramesPerTrigger = 100;
vid
Summary of Video Input Object Using 'Logitech QuickCam Fusion'.

   Acquisition Source(s):  input1 is available.

  Acquisition Parameters:  'input1' is the current selected source.
                           100 frames per trigger using the selected source.
                           'RGB24_352x288' video data to be logged upon START.
                           Grabbing first of every 1 frame(s).
                           Log data to 'memory' on trigger.

      Trigger Parameters:  1 'immediate' trigger(s) on START.

                  Status:  Waiting for START.
                           0 frames acquired since starting.
                           0 frames available for GETDATA.

Получите и получите кадры

start(vid);
wait(vid);
framesavailable = vid.FramesAvailable;
framesavailable =

   100

frames = getdata(vid,framesavailable);

Постобработайте полученные кадры

Здесь, просто удалите любой кадр. Однако вы могли сделать обработку, которая является намного более комплексной.

toberemoved_index = [2:2:framesavailable];
frames(:,:,:,toberemoved_index) = [];
numframes = size(frames,4)
numframes =

    50

Представьте кадры к файлу AVI

Представьте кадры к файлу AVI. Для этого создайте |VideoWriter | объект, вызовите |writeVideo | функция, чтобы добавить все кадры в файл AVI, и затем использовать |close | функция, чтобы высвободить средства, сопоставленные с файлом AVI.

vwObj = VideoWriter('timelapsevideo', 'Uncompressed AVI');
vwObj.FrameRate = 15;
open(vwObj);
writeVideo(vwObj, frames);
close(vwObj);

Воспроизведите таймлапс последовательность AVI

Чтобы воспроизвести таймлапс последовательность AVI, щелкните правой кнопкой по имени файла в Браузере текущей папки MATLAB® и выберите Open Outside MATLAB из контекстного меню.

Очистка

По окончании с объектом ввода видео, необходимо использовать функцию delete, чтобы освободить аппаратные ресурсы, сопоставленные с ним и удалить его из рабочей области с помощью функции clear. Также удалите и очистите объект VideoWriter.

delete(vid);
delete(vwObj);
clear vid vwObj;