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

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

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

См. последовательность таймлапса один день длиной. (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');

Определите частоту кадров

Большинство устройств не позволяет вам управлять своей частотой кадров. Лучше определять частоту кадров экспериментально путем получения кадров и анализа меток времени кадров.

vid.FramesPerTrigger = 100;
start(vid);
wait(vid,Inf);

% Retrieve the frames and timestamps for each frame.
numframes = vid.FramesAvailable;
[frames,time] = getdata(vid,numframes);

% Calculate the frame rate by taking the average difference
% between the timestamps for each frame.
framerate = mean(1./diff(time))
framerate =

   17.5296

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

Свойство FrameGrabInterval задает, как часто кадры хранятся от видеопотока. Например, если мы устанавливаем его на 5, затем только 1 из 5 кадров сохранен - другие 4 кадра будут отброшены.

% We want to compress 30 seconds into 3 seconds, so
% only acquire every tenth frame.
vid.FrameGrabInterval = 10;

Определите количество кадров, чтобы получить

Чтобы определить сколько кадров, чтобы получить всего, вычислите общее количество кадров, которые были бы получены в частоте кадров устройства, и затем делиться на FrameGrabInterval.

capturetime = 30;
interval = vid.FrameGrabInterval;
numframes = floor(capturetime * framerate / interval)
numframes =

    52

vid.FramesPerTrigger = numframes;

Сконфигурируйте дисковое журналирование AVI

Из-за большого количества кадров, которые будут получены, это более практично, чтобы регистрировать изображения к диску, а не к памяти. Используя Image Acquisition Toolbox, можно регистрировать изображения непосредственно к файлу AVI. Мы конфигурируем это использование свойства LoggingMode.

vid.LoggingMode = 'disk';

Создайте объект VideoWriter регистрировать к, с помощью команды VideoWriter. Мы должны задать имя файла, чтобы использовать, и затем установить частоту кадров, в которой должен быть воспроизведен файл AVI. Затем установите свойство DiskLogger объекта ввода видео к объекту VideoWriter.

vwObj = VideoWriter('timelapsevideo','Uncompressed AVI');
vwObj.FrameRate = framerate;
vid.DiskLogger = vwObj;
vid
Summary of Video Input Object Using 'Logitech QuickCam Fusion'.

   Acquisition Source(s):  input1 is available.

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

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

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

Выполните приобретение таймлапса

Запустите приобретение таймлапса и ожидайте приобретения, чтобы завершиться. Обратите внимание на то, что Image Acquisition Toolbox не связывает MATLAB®, в то время как это получает. Можно запустить приобретение и продолжить работать в MATLAB.

start(vid);

% Wait for the capture to complete before continuing.
wait(vid,Inf);

Закройте файл AVI

Если получение завершается, получите объект файла AVI и используйте функцию close, чтобы высвободить средства, сопоставленные с ним.

vwObj = vid.DiskLogger;
close(vwObj);

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

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

Очистка

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

delete(vid);
clear vid;