我正在使用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)您可以看到,错误发生在我们等待收集数据时(“暂停”语句),它位于try块内,但是由于我的调试消息没有打印,程序开始停止,异常没有被正确捕获。
如何使Matlab观察try/catch结构,并在此错误发生后继续进行?
发布于 2014-10-19 22:19:48
我想通了。错误消息不是真正的错误,而是更多的警告。执行并没有停止。然而,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现在,在帧删除时,对象将被重新启动并继续捕获。显然,丢失的帧无法恢复,因此视频中会出现空白。
https://stackoverflow.com/questions/26290470
复制相似问题