这个例子展示了如何在数据后处理的同时从网络摄像头中进行帧采集。
在本例中,您使用一个并行工作程序来执行图像采集,然后通过使用DataQueue
对象。
要使用worker而不是MATLAB客户机执行后处理,请参见执行图像采集和并行图像处理.
使用本地集群上的一个工作人员启动一个并行池。
parpool (“本地”1);
使用“local”配置文件启动并行池(parpool)…连接到并行池(工作人员数量:1)。
为了将信息从工作人员发送回MATLAB客户端,创建一个DataQueue
对象。
D = parallel.pool.DataQueue;
创建一个图形对象,并设置“可见”
来“上”
这样它就能在现场脚本之外打开了。每次图像到达时都要显示DataQueue
对象,使用afterEach
.
无花果=图(“可见”,“上”);afterEach (D, @processDisp);
定义采集频率,即,您希望每秒从相机中取出多少帧。
频率= 5;
选择一个考虑后处理所需时间的值。否则视频流会随着时间的推移明显滞后。
要启动并行工作器上的数据采集,调用parfeval
并通过采集功能,实现DataQueue
对象,以及获取速率作为参数。
f = parfeval (@getFrameFromCamera 0 D,频率);
获取30秒内的帧。这个例子应用了一个模糊过滤器作为后处理步骤,并将原始帧和处理后的帧并排显示。
暂停(30);
要停止视频传输,请取消收购。
取消(f);
有关显示工人后处理的更详细示例,请参见执行图像采集和并行图像处理.
的getFrameFromCamera
功能连接到网络摄像头,然后获取图像帧并发送给DataQueue
对象在无限循环中。
函数getFrameFromCamera(D,freq) cam = webcam;而True img =快照(cam);发送(D, img);暂停(1 /频率);结束结束
的processDisp
函数对帧进行后处理,并在每次数据到达时显示原始的和处理过的帧DataQueue
对象。
函数processDisp(img) imgBlur = imgaussfilt(img,3);imgBlur imshow ([img],“父”甘氨胆酸,)结束
parpool
|parallel.pool.DataQueue
|afterEach
|parfeval
|imshow