在MATLAB中通过鼠标点击从图像中获取像素位置

时间:2016-06-12 10:36:09

标签: matlab

我正在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
...
%

还有其他方法可以将可点击区域限制在图像区域吗?

1 个答案:

答案 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');