Вопрос

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

Это было полезно?

Решение

ПРИМЕЧАНИЕ. Теперь оно обновлено для использования с более новыми версиями 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 через регулярные промежутки времени.

Другие советы

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

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 это тоже полезно), однако...

Если будет получено большое количество кадров, более практично записывать изображения на диск, а не в память.Используя набор инструментов для получения изображений, вы можете записывать изображения непосредственно в AVI-файл.Мы настраиваем это с помощью свойства LoggingMode.

set(vid,'LoggingMode','disk');

Создайте объект AVI-файла для входа в систему, используя команду avifile.Мы должны указать имя файла, которое будем использовать, и частоту кадров, с которой должен воспроизводиться AVI-файл.Затем установите для свойства DiskLogger объекта видеовхода значение AVI-файл.

avi = avifile('timelapsevideo','fps',framerate);
set(vid,'DiskLogger',avi);

Запустите покадровый сбор данных и дождитесь завершения сбора данных.Обратите внимание, что набор инструментов для получения изображений не привязывает MATLAB® во время получения.Вы можете начать сбор данных и продолжить работу в MATLAB.

start(vid);
wait(vid,Inf); % Wait for the capture to complete before continuing.

Как только захват будет завершен, извлеките объект AVI file и используйте функцию 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.

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

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

http: // блоги. mathworks.com/videos/2008/01/18/cool-feature-video-processing-demos/

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

Аудио / видео рекордер и усилитель; приложение проигрывателя на основе MATLAB

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

Недавно я написал сообщение в блоге о том, как записывать синхронизированное аудио и видео в 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');
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top