当图像采集工具箱丢帧时,为什么不在Matlab中尝试/捕捉工作?

时间:2014-10-10 01:19:17

标签: exception-handling try-catch matlab

我正在使用Matlab的图像采集工具箱来获取千兆以太网上的高速视频。我在丢帧方面遇到了一些麻烦,但这不是这个问题的关键所在。我真正想做的是告诉Matlab 继续运行脚本,即使在遇到丢帧错误之后也是如此。

我为此目的使用了try / catch语句,但它不起作用。这是我的代码,省略了一些与设置相机和使用数据有关的细节:

%% setting up camera
while(1)
    % continue acquiring data forever

    while(vidObj.FramesAvailable < vidObj.FramesPerTrigger)
        % wait until we're ready to get the data
        try
            pause(.1)
        catch exception
            disp "i got an error"
        end
    end

    % get the data
    [img, t] = getdata(vidObj);

    %% do something with the data
    %% ...
end

会发生的是,每隔一段时间,一些帧被丢弃,工具箱会引发错误。 这发生在try块内,但是Matlab反正引发了异常!输出看起来像:

Error event occurred at 21:08:20 for video input object: Mono8-gige-1.
gige: Block/frame 1231 is being dropped beecause a lost packet is unable to be resent....

Error in script_name (line 82)
    pause(.1)

您可以看到在我们等待收集数据时出现错误(&#34;暂停&#34;语句),这是在try块内部,但由于我没有正确捕获异常调试信息不​​打印,程序停止运行。

如何让Matlab观察try / catch结构并在发生此错误后继续?

1 个答案:

答案 0 :(得分:0)

我明白了。错误消息不是真正的错误,而是更多的警告。执行不会停止。但是,vidObj停止收集帧,我的代码将永远循环,等待收集足够的帧。

您可以像这样插入对此条件的检查:

% wait until enough frames are available
while(vidObj.FramesAvailable < vidObj.FramesPerTrigger)
    pause(.1)

    if strcmp(vidObj.Running, 'off')
        % It has stopped running, probably because frames were dropped
        start(vidObj)
    end
end

现在,在帧丢弃时,对象将重新启动并继续采集。显然丢失的帧无法恢复,因此视频中会有间隙。