exponenta event banner

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

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

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

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

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

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

% 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

Сохранить объект VideyWriter в 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

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

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

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

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

Очистить

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

delete(vid);
clear vid;

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

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

  • Запуск панели инструментов для получения одной рамки

  • Извлечение кадра

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

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

Объект VideyWriter хранится в 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