В этом примере показано, как выполнить захват системы координат от веб-камеры параллельно с постобработкой данных.
В примере вы используете параллельного рабочего, чтобы выполнить получение изображений и затем передать данные потоком назад клиенту для постобработки при помощи 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);
Для более подробной постобработки показа в качестве примера на рабочих смотрите, Выполняют Получение изображений и Параллельную Обработку изображений.
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
parpool
| parallel.pool.DataQueue
| afterEach
| parfeval
| imshow