我正在编写一个用于车道检测的算法, 这是我用过的骨架代码, while ~isDone(video) currentFrame = getFrame(video); . . % Do segmentation and lane detection . figure(1),imshow(currentFrame),hold on figure(1),plot( theLine
这是我用过的骨架代码,
while ~isDone(video) currentFrame = getFrame(video); . . % Do segmentation and lane detection . figure(1),imshow(currentFrame),hold on figure(1),plot( theLinesThatWereDetected ); pause(.0001); % without pause the plot command wouldn't work like a streamer. end
这是模拟的视频https://www.youtube.com/watch?v=K881hFCyiQ8,
问题:输出视频在显示每个帧后变得越来越慢,但是一旦我关闭图形窗口它就会自动重启(随着代码的运行)并且它变得更快(检查视频).为什么会发生这种情况,是否有一些内存积累正在减缓绘图速度?除了手动关闭图形窗口外,我还能做些什么来加快速度?
我知道有一个video.ShapeInserter对象可用,它比我用过的绘图方法更快.我没有使用它的原因是因为更改了视频中的线条粗细.ShapeInserter对象仅在2014版本中出现,我使用的是2013版本.我希望我的车道检测有非常明显的粗线.
请给我一些建议.
编辑:这是应用Shai建议的编辑后的视频. https://www.youtube.com/watch?v=LJ_may0hkaE&feature=youtu.be
问题:基本上,由于轴处理的保持状态,所有帧都会添加到您的图形中,这会导致内存增加并减慢您的速度.
解:
在绘制线条后应该关闭保持,因此下一帧的imshow将丢弃前一帧.
imshow(currentFrame); hold on; plot( theLinesThatWereDetected ); hold off; %// super critical! drawnow; %// instead of pause
评论:
>正如Ander所指出的,最好使用drawnow
而不是暂停(0.001).
>只更改绘图的XData和YData(如Benoit_11所示)是不够的,它不能解决因“保持”图中所有帧而导致的内存浪费.