В этом примере показано, как создать видео таймлапса использование событий таймера, чтобы предварительно квалифицировать системы координат.
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 в 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® и выберите 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