【发布时间】:2013-03-04 13:02:57
【问题描述】:
目标:在一个图形中执行多次点击,其中包含使用 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: 谢谢夏的回答。但我仍然无法完成我的意图。
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 坐标的数组)。我显然不了解执行此任务的机制。有什么帮助吗?
【问题讨论】:
-
您的代码的问题是
testClicks(忽略while循环)在创建图像后立即返回,因此xArray和yArray为空。您可能需要使用assignin('base',...)来克服这个问题。
标签: matlab save coordinates