快速加速

时间:2012-01-17 21:15:03

标签: matlab image-processing

getsnapshot函数需要花费大量时间执行,因为(我猜)每次调用时都会初始化网络摄像头。如果要获取具有高帧速率的图像,则会出现此问题。

我欺骗我随便发现是调用preview函数,这使得网络摄像头处理程序保持打开状态,使getsnapshot几乎瞬间完成,但它保持一个小的预览窗口打开:

% dummy example
cam = videoinput(...);
preview(cam);

while(1)
    img = getsnapshot(cam);
    % do stuff
end

加速getsnapshot是否有“更清洁”的方法? (没有打开预览窗口)

1 个答案:

答案 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库来获得图像处理方面的良好性能。