В этом примере показано, как создать просроченное видео с использованием событий таймера для предквалификации систем координат.
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 в 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);
После завершения захвата извлеките объект VideoWriter, сохраненный в свойстве UserData, и используйте close
функция, чтобы освободить связанные с ней ресурсы.
avi = vid.UserData; avi = close(avi);
Чтобы воспроизвести просроченную последовательность 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