В этом примере показано, как создать видео с временным интервалом без использования всех кадров сбора.
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');
Большинство устройств не позволяют управлять их частотой кадров. Лучше всего определять частоту кадров экспериментально путем получения кадров и анализа временных меток кадров.
vid.FramesPerTrigger = 100; start(vid); wait(vid,Inf); % Retrieve the frames and timestamps for each frame. numframes = vid.FramesAvailable; [frames,time] = getdata(vid,numframes); % Calculate the frame rate by taking the average difference % between the timestamps for each frame. framerate = mean(1./diff(time))
framerate = 17.5296
FrameGrabInterval свойство определяет частоту сохранения кадров из видеопотока. Например, если установить значение 5, то сохраняется только 1 из 5 кадров - остальные 4 кадра будут отброшены.
% We want to compress 30 seconds into 3 seconds, so % only acquire every tenth frame. vid.FrameGrabInterval = 10;
Чтобы определить общее количество кадров, которые должны быть получены, вычислите общее количество кадров, которые будут получены с частотой кадров устройства, и затем разделите на FrameGrabInterval.
capturetime = 30; interval = vid.FrameGrabInterval; numframes = floor(capturetime * framerate / interval)
numframes =
52
vid.FramesPerTrigger = numframes;
Из-за большого количества кадров, которые будут получены, более практично записывать изображения на диск, а не в память. С помощью панели инструментов получения изображений можно записывать изображения непосредственно в файл AVI. Мы настраиваем это с помощью LoggingMode собственность.
vid.LoggingMode = 'disk';
Создайте объект VideyWriter для входа в систему с помощью VideoWriter команда. Необходимо указать используемое имя файла, а затем установить частоту кадров, с которой должен воспроизводиться AVI-файл. Затем установите DiskLogger свойство объекта ввода видео для объекта VideoWriter.
vwObj = VideoWriter('timelapsevideo','Uncompressed AVI'); vwObj.FrameRate = framerate; vid.DiskLogger = vwObj; vid
Summary of Video Input Object Using 'Logitech QuickCam Fusion'.
Acquisition Source(s): input1 is available.
Acquisition Parameters: 'input1' is the current selected source.
91 frames per trigger using the selected source.
'RGB24_352x288' video data to be logged upon START.
Grabbing first of every 10 frame(s).
Log data to 'disk' on trigger.
Trigger Parameters: 1 'immediate' trigger(s) on START.
Status: Waiting for START.
100 frames acquired since starting.
0 frames available for GETDATA.
Запустите сбор данных по истечении времени и дождитесь завершения сбора данных. Обратите внимание, что панель инструментов получения изображений не связывает MATLAB ® во время приобретения. Можно начать приобретение и продолжить работу в MATLAB .
start(vid);
% Wait for the capture to complete before continuing.
wait(vid,Inf);
После завершения записи извлеките объект файла AVI и используйте close для освобождения связанных с ним ресурсов.
vwObj = vid.DiskLogger; close(vwObj);
Для воспроизведения временной последовательности AVI щелкните правой кнопкой мыши имя файла в браузере «Текущая папка MATLAB» и выберите в контекстном меню команду «Открыть вне MATLAB».
Когда вы закончите с объектом ввода видео, вы должны использовать delete чтобы освободить связанные с ним аппаратные ресурсы и удалить их из рабочей области с помощью clear функция.
delete(vid);
clear vid;