getsnapshot
函数需要花费大量时间执行,因为(我猜)每次调用时都会初始化网络摄像头。如果要获取具有高帧速率的图像,则会出现此问题。
我欺骗我随便发现是调用preview
函数,这使得网络摄像头处理程序保持打开状态,使getsnapshot
几乎瞬间完成,但它保持一个小的预览窗口打开:
% dummy example
cam = videoinput(...);
preview(cam);
while(1)
img = getsnapshot(cam);
% do stuff
end
加速getsnapshot
是否有“更清洁”的方法? (没有打开预览窗口)
答案 0 :(得分:6)
您可以使用专为视觉应用而打造的全新“机器视觉”工具箱。请参阅以下代码:
vid = videoinput('winvideo', 1, 'RGB24_320x240'); %select input device
hvpc = vision.VideoPlayer; %create video player object
src = getselectedsource(vid);
vid.FramesPerTrigger =1;
vid.TriggerRepeat = Inf;
vid.ReturnedColorspace = 'rgb';
src.FrameRate = '30';
start(vid)
%start main loop for image acquisition
for t=1:500
imgO=getdata(vid,1,'uint8'); %get image from camera
hvpc.step(imgO); %see current image in player
end
如您所见,您可以使用getdata获取图像。 Matlab中视频应用程序的瓶颈是预览窗口,它大大延迟了代码。新的vision.VideoPlayer 很多更快(我在Matlab的实时视觉应用程序中使用了这个代码。当我编写没有视觉工具箱的第一个版本时,实现大约18 fps的帧速率和使用新工具箱大约70个!)。
注意:我需要使用Matlab在图像应用程序中加速,你应该考虑通过mex使用OpenCV库来获得图像处理方面的良好性能。