Выполните получение изображений веб-камеры параллельно с постобработкой

В этом примере показано, как выполнить приобретение системы координат от веб-камеры параллельно с постобработкой данных.

В примере вы используете параллельного рабочего, чтобы выполнить получение изображений и затем передать данные потоком назад клиенту для постобработки при помощи DataQueue объект.

Настройте параллельную среду

Начните параллельный пул с одного рабочего на локальном кластере.

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

Смотрите также

| | | |

Похожие темы