1

我正在附加一个示例 GUI 代码,它有两个轴和 2 个图像,当我使用 ginput 选择种子点时,我可以在任一轴上进行选择,是否有将 ginput 限制到特定轴

% --- Executes on button press in open.
function open_Callback(hObject, eventdata, handles)
% hObject    handle to open (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
global img1;
global img2;

img1 = imread('peppers.png');
img2 = imread('rice.png');

axes(handles.axes1);
imshow(img1,[]);
axes(handles.axes2);
imshow(img2,[]);


% --- Executes on button press in seedpointSelect.
function seedpointSelect_Callback(hObject, eventdata, handles)
% hObject    handle to seedpointSelect (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
global img1;
global img2;
global x;
global y;

axes(handles.axes1);
imshow(img1,[]);
[y,x] = ginput(handles.axes1);
y = round(y); x = round(x);
set(handles.xcord,'String',num2str(x));
set(handles.ycord,'String',num2str(y));

有关将 ginput 限制为特定轴的任何帮助,

谢谢,戈皮

4

2 回答 2

1

在旧版本的 MATLAB 中,您曾经能够更改 的HitTest属性axes以忽略来自的点击ginput

set(handles.axes2, 'Hittest', 'off')

更好的方法是使用ButtonDownFcn,因为您可以通过对象更好地控制鼠标事件axes

从你的内部OpeningFcn

set(handles.axes1, 'ButtonDownFcn', @mouseCallback)

然后你需要创建回调函数

function mouseCallback(src, evnt)
    handles = guidata(src);

    % Get the current point
    xyz = get(src, 'CurrentPoint');

    x = xyz(1,1);
    y = xyz(1,2);

    % Store x/y here or whatever you need to do
end
于 2017-04-10T13:27:09.570 回答
0

不要使用ginput,而是创建一个鼠标点击回调(ButtonDownFcn)。您可以将回调设置为,例如,从轴中删除回调函数。在设置回调的主程序中,然后您waitfor要更改该属性。一旦用户单击,您就可以重新获得控制权,然后您可以读取最后一次鼠标单击的位置 ( CurrentPoint)。请注意,您读出的位置是轴坐标,而不是屏幕像素。这是一件好事,它很可能对应于图像中显示的一个像素。

于 2017-04-08T01:01:56.533 回答