我正在使用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结构并在发生此错误后继续?
答案 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
现在,在帧丢弃时,对象将重新启动并继续采集。显然丢失的帧无法恢复,因此视频中会有间隙。