我有一个使用 USB 视频采集器从模拟相机获取图像的代码。对我来说最大的问题是,每当我使用 GETSNAPSHOT 获取图像时,该过程需要几秒钟才能执行,而设备的帧速率实际上是每秒 30 帧。有趣的是 preview(vidObj) 工作得很好。我知道有很多关于为什么 GETSNAPHOT 如此缓慢的讨论,并且有一个使用 TRIGGERCONFIG 非常流行的提议解决方案,但出于某种原因,这对我来说并没有提高图像采集率。我将在下面解释这两种情况:

  • 直接使用GETSNAPSHOT
    obj = videoinput('winvideo', 2);
       while someconditionhere
       img= getsnapshot(cam); % extract frame i from the video
       imshow(img);
       %do stuff
    end
    
  • 与 TRIGGERCONFIG
    obj = videoinput('winvideo', 2);
    triggerconfig(obj,'manual');
    start(obj);
    while someconditionhere
        img= getsnapshot(cam); % extract frame i from the video
        imshow(img);
        %do stuff
    end
    

  • 我试图让预览窗口在后台运行(我在网上找到的一个粗略的解决方案)但是我的 while 循环没有执行。此外,如果在第一个代码中,我添加了 start(obj) ,那么它会给我一个错误:“GETSNAPSHOT 期间发生超时。”

    我的想法用完了,我有几个小时后到期。任何帮助将不胜感激!

    最佳答案

    你可以试试下面的链接。有人在 matlab 中完成了实时鼠标指针控制,所以他们应该得到相当快的响应。 http://www.mathworks.com/matlabcentral/fileexchange/42943-virtual-mouse--mouse-pointer-control-using-color-detection/content/MouseControl.m

    您会发现有用的主要代码应该是这样的 -

    cam = imaqhwinfo; % Get Camera information
    cameraName = char(cam.InstalledAdaptors(end));
    cameraInfo = imaqhwinfo(cameraName);
    cameraId = cameraInfo.DeviceInfo.DeviceID(end);
    cameraFormat = char(cameraInfo.DeviceInfo.SupportedFormats(end));
    
    vidDevice = imaq.VideoDevice(cameraName, cameraId, cameraFormat, ... % Input Video from current adapter
                    'ReturnedColorSpace', 'RGB');
    
    while (condition)
       rgbFrame = step(vidDevice); % Acquire single frame
    

    关于image - MATLAB 中的 GETSNAPSHOT 太慢,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30469437/

    10-13 08:53