【问题标题】:Update image in imshow()?在 imshow() 中更新图像?
【发布时间】:2020-07-27 17:17:31
【问题描述】:

我试图随着时间的推移显示一个图像,因为它是由一个函数转换的。我使用imshow() 来显示我的图像。

如果我使用代码,

im = zeros(y,x);

for n=...
   im = im + myFunction(...);
   imshow(im)
end

然后,图像的每次迭代都会正确显示。问题是显示的数字非常小。如果我在脚本运行时尝试调整图形,一旦达到 for 循环的下一次迭代,图像就会重置为其原始大小。

我希望能够调整显示器的大小并将其保持在我想要的屏幕尺寸和位置。

imshow() 状态的文档,

'Parent' - 图像对象的父轴
轴对象 | UIAxes 对象
图像对象的父坐标区,指定为逗号分隔的对组,由 'Parent' 和一个 Axes 对象或一个 UIAxes 对象组成。使用 'Parent' 名称-值参数来构建一个 UI,让您可以控制 Figure 和 Axes 属性。

与此问题在线相关的其他问题指向使用一组轴。下面是我使用轴的尝试。

figure
ha = axes('units','normalized','position',[0 0 1 1]);
im = zeros(y,x);
imshow(im, 'Parent', ha);

for n=...
    im = im + myFunction(...);
    imshow(im, 'Parent', ha);
end

此代码不起作用。由于某种原因,直到 for 循环完成后才会显示该图形。尽管最初的 imshow 调用是在 for 循环开始之前。

任何帮助将不胜感激。

【问题讨论】:

    标签: matlab matlab-figure


    【解决方案1】:

    假设如果您的图像没有在迭代中更改大小,则一种选择是设置 imshow 返回的图形 Image 对象的 CData 属性。

     hIm = imshow(im, 'Parent', ha);
     
     for n=...
          im = im + myFunction(...);
          hIm.CData = im;
          drawnow limitrate
     end
    

    【讨论】:

    • 这似乎是处理它的聪明方法。我发现它仍然无法与您提供的代码一起使用。它只会在 for 循环完成执行后拉出图像。通过在循环中添加pause,图像更新确实有效。我将暂停设置在一个不可行的低数字 pause( 0.00000000000000000000000000001) 并且它有效,所以我猜更新 imshow 所需的时间存在一些问题?
    • 我不认为暂停是您想要强制渲染的内容。我会试试:mathworks.com/help/matlab/ref/drawnow.htmldrawow limitrate
    猜你喜欢
    • 2018-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-30
    相关资源
    最近更新 更多