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');

Определение частоты кадров

Большинство устройств не позволяют управлять их частотой кадров. Лучше всего определять частоту кадров экспериментально путем получения кадров и анализа временных меток кадров.

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-дисков

Из-за большого количества кадров, которые будут получены, более практично записывать изображения на диск, а не в память. С помощью панели инструментов получения изображений можно записывать изображения непосредственно в файл 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

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

vwObj = vid.DiskLogger;
close(vwObj);

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

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

Очистить

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

delete(vid);
clear vid;