В этом примере показано, как выполнить сбор кадров с веб-камеры параллельно с постобработкой данных.
В этом примере для получения изображения используется параллельный работник, а затем данные передаются обратно клиенту для постобработки с помощью DataQueue объект.
Для выполнения постобработки с использованием работников вместо клиента MATLAB см. раздел Выполнение сбора изображений и параллельная обработка изображений.
Запустите параллельный пул с одним работником в локальном кластере.
parpool('local',1);Starting parallel pool (parpool) using the 'local' profile ... Connected to the parallel pool (number of workers: 1).
Чтобы отправить информацию обратно от работника клиенту MATLAB, создайте DataQueue объект.
D = parallel.pool.DataQueue;
Создание объекта фигуры и установка 'Visible' кому 'on' так, что он открывается вне живого сценария. Отображение изображений при каждом их получении из DataQueue объект, использование afterEach.
fig = figure('Visible','on'); afterEach(D,@processDisp);
Определите частоту получения, то есть количество кадров в секунду, которые вы хотите извлечь из камеры.
freq = 5;
Выберите значение, учитывающее продолжительность постобработки. В противном случае видеопоток может значительно отставать во времени.
Чтобы начать сбор данных на параллельном работнике, вызовите parfeval и передать функцию сбора, DataQueue объект и скорость получения в качестве аргументов.
f = parfeval(@getFrameFromCamera,0,D,freq);
Получение кадров в течение 30 секунд. В этом примере в качестве шага постобработки применяется фильтр размытия, показывающий исходные и обработанные кадры бок о бок.
pause(30);

Чтобы остановить передачу видео, отмените получение.
cancel(f);
Более подробный пример постобработки для работников см. в разделах Выполнение сбора изображений и параллельная обработка изображений.
getFrameFromCamera функция подключается к веб-камере, затем получает кадры изображения и отправляет их в DataQueue объект в бесконечном цикле.
function getFrameFromCamera(D,freq) cam = webcam; while true img = snapshot(cam); send(D,img); pause(1/freq); end end
processDisp функция постпроцессирует кадры и отображает исходные и обработанные кадры каждый раз, когда данные поступают в DataQueue объект.
function processDisp(img) imgBlur = imgaussfilt(img,3); imshow([img, imgBlur],'Parent',gca) end
afterEach | imshow | parallel.pool.DataQueue | parfeval | parpool