我正在MATLAB中开发一个程序,它将显示一个场景的图像,用户将点击图像上的任何一点,程序将消除图像中具有用户像素颜色的所有像素选择。
我已经完成了我需要的一切或工作,但我只有一个问题:当我使用ginput
功能以便用户点击他喜欢的任何一点时,该功能允许点击任何地方在图上,包括图像外部,因此很难获得他点击的正确坐标。这就是我现在所拥有的:
figure;
imshow(img)
[x,y] = ginput(1);
close all
v = img(int8(x),int8(y));
% Put all the pixels with the same value as 'v' to black
...
%
还有其他方法可以将可点击区域限制在图像区域吗?
答案 0 :(得分:1)
您无法将ginput
限制为axes
个对象。可能更好的方法是使用图像的ButtonDownFcn
。
hfig = figure;
him = imshow(img);
% Pause the program until the user selects a point (i.e. the UserData is updated)
waitfor(hfig, 'UserData')
function clickImage(src)
% Get the coordinates of the clicked point
hax = ancestor(src, 'axes');
point = get(hax, 'CurrentPoint');
point = round(point(1,1:2));
% Make it so we can't click on the image multiple times
set(src, 'ButtonDownFcn', '')
% Store the point in the UserData which will cause the outer function to resume
set(hfig, 'UserData', point);
end
% Retrieve the point from the UserData property
xy = get(hfig, 'UserData');