打开新图像时如何在 Matlab 轴 window 中保留文本对象?

How do I preserve text objects in a Matlab axes window when opening a new image?

我的程序打开一张图片

pic_handle = imshow('pic.bmp');

然后添加一些文本对象

text(x, y, 'my text');
text(x2, y2, 'more text');

然后用户稍后可以select打开另一个图像,从而导致

imshow('pic2.bmp');
delete(pic_handle);

现在我所有的文字都消失了。仔细查看后,我发现显示列表已被清除,文本对象的句柄似乎无效(对此我不确定)。

我的问题是是否有一些方法可以保留文本?即,在不破坏显示列表的情况下在轴对象中打开一个新图像?

这里有两个问题:

  1. 第二个 imshow 删除文本(hold on 修复它)
  2. 新图像被放置在文本之上。这个问题可以用 uistack:

    来解决
    pic_handle = imshow('pic1.bmp');
    h1=text(100, 20, 'my text');
    h2=text(20, 100, 'more text');
    hold on
    imshow('pic2.bmp');
    delete(pic_handle);
    uistack(h1,'top')
    uistack(h2,'top')
    

AVK 可能有比我更合适的答案,但我还是 post 这个。

可以直接替换图中存储的数据。在图形内存中翻找一下,您可以找到数据的存储位置并替换它。如果图像大于或小于原始图像,此代码不会调整您的图形大小。

% read some data
h = imshow('ngc6543a.jpg');
text(20,20, 'my text', 'Color', 'red');
text(20,50, 'more text', 'Color', 'blue');

% get a different image
imdata2 = imread('circuit.tif');
height = size(imdata2,1);
width = size(imdata2,2);

% replace the data in the figure
set(h, 'CData', imdata2);
set(h, 'YData', [1 height]);
set(h, 'XData', [1 width]);