我在Matlab中创建GUI,我需要使用鼠标移动一些数据点,例如:
imshow(someImage, [ ]), hold on;
plot(x, y, '*r')
我想通过点击它从x和y矢量中选择一个点并使用鼠标移动它。我该如何实施呢?
答案 0 :(得分:1)
您可以使用图像处理工具箱中的impoint
,因为它已经为您提供了拖动点的可能性。因此,创建一个图形并绘制任何你想要的图形。然后,调用impoint(gca)
,这样就可以在当前轴上放置一个点。绘制点后,您可以用鼠标拖动它。您可以再次致电impoint
获取第二个点,依此类推......
要获得点的位置,您希望在创建时将它们存储在impoint
- 数组中,然后使用每个点调用getPosition
以获取坐标。
由于您未提供任何代码以使用所需功能进行扩展,因此我创建了一个带有两个按钮的简单绘图作为示例。按"添加点"它允许你放置一个新点。第一次单击后,您可以移动此点。添加完所有点后,点击"完成"阅读点的最终坐标。
figure; % create new figure
plot([0,1],[0,0],'r'); % plot something nice (your image)
ylim([-1,1]); % set limit of y-axis
h = impoint.empty; % define empty object array of type impoint
btnAdd = uicontrol('String','Add point',...
'Position',[90 60 70 30],...
'Callback', 'h(end+1)=impoint(gca);h(end).Deletable=0;wait(h(end))');
btnDone = uicontrol('String','Done',...
'Position',[165 60 40 30],...
'Callback', 'uiresume(gcbf)');
uiwait(gcf); % wait until 'Done' is pressed
delete(btnAdd); % revove the button
delete(btnDone); % revove the button
% get coordinates of points
pos = zeros(numel(h),2); % preallocate
for k = 1:numel(h)
pos(k,:) = getPosition(h(k)); % read coordinates of points
end
% evaluate points
positivePoints = sum(pos(:,2)>0) % count all points above 0