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

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

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

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

Чтобы сгенерировать события таймера, мы задаем две вещи: что происходит, когда происходит, и как часто это должно произойти. 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.

Выполните захват таймлапса

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

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

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

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

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

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

Чтобы воспроизвести таймлапс последовательность AVI, щелкните правой кнопкой по имени файла в Браузере текущей папки MATLAB® и выберите Open Outside 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