首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么当图像采集工具箱丢弃帧时,在Matlab中不尝试/捕捉工作?

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

Stack Overflow用户
提问于 2014-10-10 01:19:17
回答 1查看 390关注 0票数 0

我正在使用Matlab的图像采集工具箱来获取千兆以太网上的高速视频.我对丢框有点麻烦,但这不是这个问题的问题。我真正想做的是告诉Matlab,即使在遇到丢帧错误之后,也要继续运行脚本。

为此,我使用了try/catch语句,但它只是不起作用。下面是我的代码,保留了有关设置相机和使用数据的一些细节:

代码语言:javascript
复制
%% 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无论如何都会引发异常!输出看起来类似于:

代码语言:javascript
复制
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)

您可以看到,错误发生在我们等待收集数据时(“暂停”语句),它位于try块内,但是由于我的调试消息没有打印,程序开始停止,异常没有被正确捕获。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-19 22:19:48

我想通了。错误消息不是真正的错误,而是更多的警告。执行并没有停止。然而,vidObj停止收集帧,我的代码一直循环,等待足够的帧被收集。

您可以插入对此条件的检查如下:

代码语言:javascript
复制
% 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

现在,在帧删除时,对象将被重新启动并继续捕获。显然,丢失的帧无法恢复,因此视频中会出现空白。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26290470

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档