Как записать видео с веб-камеры в MATLAB? - PullRequest
9 голосов
/ 28 октября 2009

Я хотел бы знать, как я могу записать видео в MATLAB с помощью своей веб-камеры.

Ответы [ 6 ]

11 голосов
/ 19 сентября 2012

Сначала создайте интерфейс ввода видео

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.

Более подробная информация о триггерах и синхронизации здесь .

5 голосов
/ 28 октября 2009

ПРИМЕЧАНИЕ: Теперь оно обновлено для использования с более новыми версиями MATLAB, поскольку некоторые старые функции были заменены и удалены.

Если вы уже знаете, как захватить одно изображение с веб-камеры , то это просто вопрос сшивания изображений в фильм. Вы можете использовать VideoWriter объект , чтобы открыть файл фильма, а затем добавить последовательные изображения, используя метод writeVideo. Например:

aviObject = VideoWriter('myVideo.avi');  % Create a new AVI file
for iImage = 1:100                       % Capture 100 frames
  % ...
  % You would capture a single image I from your webcam here
  % ...
  writeVideo(aviObject, I);  % Add the image to the AVI file
end
close(aviObject);  % Close the AVI file

Я просто использовал цикл for в качестве простого примера, но вы можете использовать timer, если вместо этого вы хотите захватывать изображения и добавлять их в файл AVI через регулярные промежутки времени.

1 голос
/ 26 декабря 2011

В своей студенческой жизни я создал этот проект под названием

Приложение для записи и воспроизведения аудио / видео на основе MATLAB

В этом я занимался записью звука, записью и воспроизведением видео в программировании Matlab. Вы можете скачать исходный код с здесь

1 голос
/ 30 октября 2009

Здесь вы можете увидеть отличные видеоролики о том, как захватывать и обрабатывать изображения с веб-камеры, поэтому запись не должна быть сложной:

http://blogs.mathworks.com/videos/2008/01/18/cool-feature-video-processing-demos/

0 голосов
/ 22 августа 2016

Недавно я написал сообщение в блоге о том, как записывать синхронизированное аудио и видео в MATLAB, отправляя командные строки в программу ffmpeg. Вы можете узнать больше здесь , но ниже приведен пример использования некоторых настроек, которые имеют смысл на моем компьютере.

dos('ffmpeg -list_devices true -f dshow -i dummy')

dos('ffmpeg -f dshow -list_options true -i video="USB2.0 HD UVC WebCam')

dos('ffmpeg -f dshow -video_size 1280x720 -framerate 30 -audio_buffer_size 80 -i video="USB2.0 HD UVC WebCam":audio="Microphone (Realtek High Definition Audio)" -t 10 -c:v libx264 -preset veryfast -crf 25 test_vid2.mp4');
...