6

我似乎无法让我的图像显示鼠标光标的坐标,同时也无法使用 ginput 来存储点。

我目前正在尝试以下操作:

MriHotrod = imread('Image.bmp');
Fig = figure('Name','BobDole'),...
    imshow(Image, 'InitialMagnification', 250)

axis on
impixelinfo

Image_1 = ginput(4)

close BobDole

ginput 仍然有效,但 impixelinfo 保持不变

Pixel Info = (X, Y) Pixel Value

我知道一些解决此问题的方法,但它们涉及功能。这似乎是一个相当简单的问题,可以避免使用函数。

4

1 回答 1

6

如果你输入edit ginput并滚动到第 238 行,你会看到

% Adding this to enable automatic updating of currentpoint on the figure 
set(fig,'WindowButtonMotionFcn',@(o,e) dummy());

换句话说,在图中ginput设置a WindowButtonMotionFcn。我的猜测是它也impixelinfo使用了这个函数,所以一旦ginput被调用它就会被禁用。

实际上,在impixelinfoval(由 使用的函数impixelinfo)中,我们在第 83 行附近找到:

callbackID = iptaddcallback(hFig,'WindowButtonMotionFcn', @displayPixelInfo);

奇怪的是:单击 4 点后如何重置?

这个魔法是由第 222 行完成的ginput

initialState.uisuspendState = uisuspend(fig);

显然,uisuspend这是一个未记录的函数,用于暂停任何预先存在的WindowButton*函数,以便稍后重置它们。所以,如果你注释掉这一行

%initialState.uisuspendState = uisuspend(fig);

并保存ginput,然后重新做整个事情,你会看到你想要的行为。

您还将看到为什么这些功能首先会被暂停——由于我不太明白的原因,当启用两个这样的功能时,一切都会变得异常缓慢。

于 2012-07-12T18:55:48.500 回答