Этот пример показывает, как выполнить сбор систем координат от веб-камеры параллельно с постобработкой данных.
В примере вы используете параллельный рабочий процесс для сбора изображений, а затем отправляете данные обратно в клиент для постобработки с помощью 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' чтобы он открылся вне live скрипта. Отображать изображения каждый раз, когда они прибывают из DataQueue объект, использование afterEach.
fig = figure('Visible','on'); afterEach(D,@processDisp);
Задайте частоту захвата, то есть сколько системы координат в секунду вы хотите вытащить из камеры.
freq = 5;
Выберите значение, которое учитывает, сколько времени занимает постобработка. В противном случае видеопоток может значительно задержаться со временем.
Чтобы начать сбор данных на параллельном работнике, вызовите parfeval и передайте функцию сбора, DataQueue объект, и скорость приобретения в качестве аргументов.
f = parfeval(@getFrameFromCamera,0,D,freq);
Получите системы координат на период 30 секунд. Этот пример применяет фильтр размытия как шаг постобработки и показывает исходные и обработанные системы координат один за другим.
pause(30);

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