目标:在一个图形中执行多次单击,包含使用 imshow 显示的图像并保存“单击”点的坐标,以用于进一步的操作。
注意:我知道这些功能getpts
/ginput
但我想在不使用它们的情况下执行此操作。这可以使用ButtonDownFcn
吗?(见以下代码)
function testClicks
img = ones(300); % image to display
h = imshow(img,'Parent',gca);
set(h,'ButtonDownFcn',{@ax_bdfcn});
function ax_bdfcn(varargin)
a = get(gca,'CurrentPoint');
x = a(1,1);
y = a(1,2);
在这个阶段,变量x
也y
只有“活”在里面ax_bdfcn
。如何使它们在testClicks
函数中可用?这可以使用ButtonDownFcn
吗?这是一个好方法吗?
非常感谢。
EDIT1: 感谢Shai的回答。但我仍然无法完成我的意图。
function [xArray, yArray] = testClicks()
img = ones(300); % image to display
h = imshow(img,'Parent',gca);
x = [];
y = [];
xArray = [];
yArray = [];
stop = 0;
while stop == 0;
set(h,'ButtonDownFcn',{@ax_bdfcn});
xArray = [xArray x];
yArray = [yArray y];
if length(xArray)>15
stop = 1;
end
end
function ax_bdfcn(varargin)
a = get(gca, 'CurrentPoint');
assignin('caller', 'x', a(1,1) );
assignin('caller', 'y', a(1,2) );
end
end % must have end for nested functions
这段代码(有问题!)是我能得到的最接近我想要的代码(在所有点击之后,有一个带有点击点的 x 和 y 坐标的数组)。我显然不了解执行此任务的机制。有什么帮助吗?