【问题标题】:figure's title is flashing on and off for frequently updated Matlab imshow()图的标题在频繁更新的 Matlab imshow() 中闪烁
【发布时间】:2015-11-14 08:05:06
【问题描述】:

我正在通过每秒调用一次imshow() 来更新我的figure。 但是对于每次更新,图形都显示为不带标题,然后立即显示标题。 我检查了 Matlab 帮助,但 imshow() 没有“名称”名称-值对参数。所以,imshow()title() 之间似乎存在延迟。

if isempty( disparity_map_figure)   
    disparity_map_figure = figure('Name', 'DISPARITY LATEST');
else
    set(groot,'CurrentFigure',disparity_map_figure);
end
imshow(disparity_map, DisparityRange, 'colormap', jet ); 
title('DISTANCE DISPARITY - LATEST');

【问题讨论】:

    标签: matlab plot matlab-figure imshow


    【解决方案1】:

    这是因为imshow 加载和显示数据需要很长时间,因此当imshow 工作时,您看不到标题,而一旦完成显示数据,title() 就会运行。

    您可以尝试通过每次更改数据来加速imshow。因此,第一次运行代码时,请运行 h=imshow(),但稍后只需在 Matlab R2014b 中更改 h.CData=disparity_map 或在 R2014b 之前的版本中更改 set(h,'Cdata',disparity_map)

    不确定它是否会起作用,但我没有要测试的代码,所以试试吧。

    【讨论】:

    • 如果这个解决方案不起作用,请尝试在设置标题后添加draw now 命令。
    【解决方案2】:

    我遇到了类似的情况,更新内部图形组件不成功。例如,set(h,'Title').String = "myTitle" 之类的命令仍然会产生闪烁。然而,不闪烁的魔法来自一个简单的hold on 指令。

    这是一个在gcf 上播放视频的示例,同时在每一帧显示一个新的text - 没有闪烁效果。这也适用于 gca 标题。

    v = VideoReader(videofilename);
    
    while hasFrame(v)
      
      frame = readFrame(v);
      imshow(frame); 
      hold on;
      text(10,10, sprintf('Current time: %.6f sec', v.CurrentTime)) % text is displayed without flickering
      % title(sprintf('Current time: %.6f sec', v.CurrentTime))     % title works fine too
    
    end
    

    MacOS 上的 Matlab R2021b

    【讨论】:

    • 这具有在前一个图像之上添加图像的效果,如果你循环100次,你将有100个图像在图形窗口中相互叠加.你看不到它们,但它们就在那里,占用内存和渲染时间。你循环的时间越长,它就会变得越迟缓。如果 Ander 的建议不起作用,请尝试在设置标题后添加 draw now 命令。
    • 好点 - 没有检查这个。然而,课本的背景是透明的,连续的文本不会相互重叠,每一个都呈现出形状独特的字母和数字。所以这是一种奇怪的“顶部”。
    • inshow 不透明。
    猜你喜欢
    • 1970-01-01
    • 2021-07-29
    • 1970-01-01
    • 2015-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多