Сначала создайте интерфейс ввода видео
vid = videoinput('winvideo',1,'RGB24_400x300');
Вам нужно настроить последний бит для вашей веб-камеры. Чтобы найти список устройств веб-камеры (и других вещей), используйте:
imaqhwinfo
Следующее превращает первую веб-камеру в объект
a=imaqhwinfo('winvideo',1)
Найдите список поддерживаемых форматов видео с помощью
a.SupportedFormats
Затем вы захотите определить частоту кадров (подробнее об этом здесь ):
set(vid,'FramesPerTrigger',100);
start(vid);
wait(vid,Inf);
% Retrieve the frames and timestamps for each frame.
[frames,time] = getdata(vid, get(vid,'FramesAvailable'));
% Calculate frame rate by averaging difference between each frame's timestamp
framerate = mean(1./diff(time))
Свойство FrameGrabInterval
указывает, как часто кадры сохраняются из видеопотока. Например, если мы установим его на 5, то останется только 1 из 5 кадров - остальные 4 кадра будут отброшены. Используя частоту кадров, определите, как часто вы хотите получать кадры
set(vid,'FrameGrabInterval',10);
Чтобы определить общее количество кадров для получения, рассчитайте общее количество кадров, которые будут получены с частотой кадров устройства, а затем разделите на FrameGrabInterval.
capturetime = 30;
interval = get(vid,'FrameGrabInterval');
numframes = floor(capturetime * framerate / interval)
Теперь вы готовы к записи и воспроизведению видео с помощью команды getdata
(peekdata
также полезно), однако ...
Если будет получено большое количество кадров, более практично записывать изображения на диск, а не в память. Используя инструмент Image Acquisition Toolbox, вы можете записывать изображения напрямую в файл AVI. Мы настраиваем это, используя свойство LoggingMode.
set(vid,'LoggingMode','disk');
Создайте объект файла AVI для входа в систему с помощью команды avifile. Мы должны указать имя файла для использования и частоту кадров, с которой должен воспроизводиться файл AVI. Затем установите свойство DiskLogger объекта видеовхода в файл AVI.
avi = avifile('timelapsevideo','fps',framerate);
set(vid,'DiskLogger',avi);
Запустите покадровое получение и дождитесь его завершения. Обратите внимание, что Image Acquisition Toolbox не связывает MATLAB® во время получения. Вы можете начать приобретение и продолжить работу в MATLAB.
start(vid);
wait(vid,Inf); % Wait for the capture to complete before continuing.
После завершения захвата извлеките объект файла AVI и используйте функцию close для освобождения ресурсов, связанных с ним.
avi = get(vid,'DiskLogger');
avi = close(avi);
Когда вы закончите работу с объектом видеовхода, вы должны использовать функцию удаления, чтобы освободить связанные с ним аппаратные ресурсы и удалить его из рабочей области, используя функцию очистки.
delete(vid);
clear vid;
Большая часть, но не все, вышеперечисленное было взято из здесь .
Когда вы нажимаете start(vid)
, вы можете заметить, что есть небольшая задержка, прежде чем начнется получение кадров. Это плохо, если вы пытаетесь синхронизировать видео с чем-то. В этом случае вы захотите попробовать работать с триггером :
triggerconfig(vid,'manual');
start(vid); %There'll be a delay here, but nothing is being captured
trigger(vid); %Use this line when you want the capture to start. There should be very little delay.
Более подробная информация о триггерах и синхронизации здесь .