【发布时间】:2014-12-22 16:12:23
【问题描述】:
我正在编写车道检测算法,
这是我用过的骨架代码,
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
【问题讨论】:
-
您是否可以尝试更新该行的 de XData 和 YData 属性,而不是在循环中发出对“plot”的新调用?那应该更快
-
另外,使用'drawnow'代替暂停
-
如果您获得了更新版本的 matlab,我建议您使用
insertShape函数将线条绘制到图像中,并使用vision.VideoPlayer显示它。insertShape现在有一个设置线条粗细的选项。 -
@Dima 不幸的是,我使用的是 2013 版本。
-
如果你有一个封闭的多边形,那么你可以使用
vision.ShapeInserter来绘制一个填充的多边形,并使其半透明。这将使您的线条可见。
标签: performance matlab image-processing computer-vision matlab-cvst