Создание видео Time-Lapse с использованием событий таймера

В этом примере показано, как создать просроченное видео с использованием событий таймера для предквалификации систем координат.

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');

Сконфигурируйте таймер

Чтобы сгенерировать события таймера, мы задаем две вещи: что происходит, когда это происходит, и как часто это должно происходить. The TimerFcn свойство задает функцию обратного вызова, которая должна выполняться при возникновении события таймера. Событие таймера происходит, когда период времени, заданный TimerPeriod срок действия свойства истекает.

Функция обратного вызова отвечает за запуск сбора и хранение системы координат в файл AVI. Дополнительные сведения об использовании этого коллбэка см. в документации. Сама эта функция обратного вызова определяется в файле timelapse_timer.m

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

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

  • Функция таймера будет выполняться каждые одну секунду

set(vid,'TimerPeriod',1);
vid.TimerFcn = @timelapse_timer;

Сохраните объект VideoWriter

Сохраните объект VideoWriter в UserData свойство объекта входа видео так, чтобы оно было доступно внутри коллбэка.

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

Сконфигурируйте объект Вход для использования ручного триггера

Каждый раз, когда происходит событие таймера

  • Вручную инициируйте поступление с помощью triggerconfig команда

  • Получите одну систему координат

  • Получите 9 дополнительных триггеров на общую сумму 10 систем координат

triggerconfig(vid, 'manual');
vid.FramesPerTrigger = 1;
vid.TriggerRepeat = 9;
vid
Summary of Video Input Object Using 'Logitech QuickCam Fusion'.

   Acquisition Source(s):  input1 is available.

  Acquisition Parameters:  'input1' is the current selected source.
                           1 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:  10 'manual' trigger(s) upon TRIGGER.

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

Выполните приобретение Time-Lapse

Теперь начните приобретение с истекшим временем и дождитесь завершения приобретения до 20 секунд.

start(vid);
wait(vid,20);

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

После завершения захвата извлеките объект VideoWriter, сохраненный в свойстве UserData, и используйте close функция, чтобы освободить связанные с ней ресурсы.

avi = vid.UserData;
avi = close(avi);

Воспроизведение последовательности AVI Time-Lapse

Чтобы воспроизвести просроченную последовательность AVI, щелкните правой кнопкой мыши имя файла в браузере текущей папки MATLAB ® и выберите в контекстном меню команду Открыть вне MATLAB .

Очистка

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

delete(vid);
clear vid;

Функция обратного вызова таймера

Ниже приведено описание функции обратного вызова, выполняемой для каждого события таймера

  • Активируйте тулбокс, чтобы получить одну систему координат

  • Извлечение системы координат

  • Определите, сохранять ли систему координат

  • Используйте writeVideo функция для добавления системы координат к файлу AVI

Объект VideoWriter хранится в UserData свойство объекта.

type timelapse_timer
function timelapse_timer(vid,~)
% This callback function triggers the acquisition and saves frames to an AVI file.

% trigger the acquisition and get the frame
trigger(vid);
frame = getdata(vid,1);

% Retrieve the total number of frames acquired
numframes_acquired = vid.FramesAcquired;

% Drop every other frame:  If the frame is odd,
% keep it.  If it is an even frame, do not keep it.
keepframe = (mod(numframes_acquired,2) == 1);

% Insert your processing code here

if(~keepframe)
    return;
end

% Retrieve the VideoWriter object stored in the UserData
% property.
vwObj = vid.UserData;

% Add the frame to the AVI
writeVideo(vwObj, frame);

end