В этом примере показано, как создать видео с временным интервалом путем удаления ненужных кадров во время постобработки.
Toolbox™ Imagement Acquisition позволяет легко производить фотографии по прошествии времени. В этом примере мы будем использовать постобработку для удаления кадров из полученной последовательности изображений. Это идеально подходит для ситуаций, когда вы не уверены, какие кадры актуальны во время захвата, или когда обработка занимает слишком много времени, чтобы иметь место во время получения. Возможным приложением было бы удаление кадров, не имеющих движения относительно предыдущего кадра. Основным недостатком этого способа прореживания времени является то, что он требует больших объемов памяти для хранения всех кадров. Этот пример получает в память, но вы, скорее всего, получите в AVI-файл, а затем используйте VideoReader для постобработки кадров.
Следите за продолжительной временной последовательностью. (21 секунда)
Перед получением изображений с помощью панели инструментов получения изображений создайте объект ввода видео.
% When executing the following code, you may need to % modify it to match your acquisition hardware. vid = videoinput('winvideo',1,'RGB24_352x288');
Конфигурация, которую мы будем использовать:
Получение 100 кадров
vid.FramesPerTrigger = 100; vid
Summary of Video Input Object Using 'Logitech QuickCam Fusion'.
Acquisition Source(s): input1 is available.
Acquisition Parameters: 'input1' is the current selected source.
100 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: 1 'immediate' trigger(s) on START.
Status: Waiting for START.
0 frames acquired since starting.
0 frames available for GETDATA.
start(vid); wait(vid); framesavailable = vid.FramesAvailable;
framesavailable = 100
frames = getdata(vid,framesavailable);
Здесь просто удалите каждую другую рамку. Однако обработка может быть гораздо более сложной.
toberemoved_index = [2:2:framesavailable]; frames(:,:,:,toberemoved_index) = []; numframes = size(frames,4)
numframes =
50
Выполните рендеринг кадров в файл AVI. Для этого создайте объект | VideyWriter |, вызовите функцию | writeVideo |, чтобы добавить все кадры в AVI-файл, а затем используйте функцию | close |, чтобы освободить ресурсы, связанные с AVI-файлом .
vwObj = VideoWriter('timelapsevideo', 'Uncompressed AVI'); vwObj.FrameRate = 15; open(vwObj); writeVideo(vwObj, frames); close(vwObj);
Для воспроизведения временной последовательности AVI щелкните правой кнопкой мыши имя файла в браузере «Текущая папка MATLAB ®» и выберите в контекстном меню команду «Открыть внешнюю папку MATLAB ».
Когда вы закончите с объектом ввода видео, вы должны использовать delete чтобы освободить связанные с ним аппаратные ресурсы и удалить их из рабочей области с помощью clear функция. Также удалите и очистите объект VideyWriter.
delete(vid); delete(vwObj); clear vid vwObj;