В этом примере показано, как создать видео с задержкой во времени, не используя все системы координат приобретения.
Image Acquisition Toolbox™ облегчает производство видео с течением времени. Самый эффективный способ сделать приобретение с истекшим временем - использовать встроенную возможность 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');
Большинство устройств не позволяют контролировать их систему координат. Лучше всего определить частоту систем координат экспериментально путем получения систем координат и анализа меток времени систем координат.
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
The 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;
Из-за большого количества систем координат, которые будут получены, более практично записывать изображения на диск, а не в память. Используя Image Acquisition Toolbox, можно записывать изображения непосредственно в файл AVI. Мы конфигурируем это с помощью LoggingMode
свойство.
vid.LoggingMode = 'disk';
Создайте объект VideoWriter для входа в систему, используя 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.
Запустите приобретение с истекшим временем и дождитесь завершения приобретения. Обратите внимание, что Image Acquisition Toolbox не связывает 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;