matlab中GUI界面点击图片获取坐标问题的解决方法


在matlab gui中,在axes上用
imshow函数显示一副图片,然后在axes的ButtonDownFcn下写下相应的响应,比如获得图像任一像素的坐标点。但是当你点击axes时,是不会有任何响应的。

例子:用pushbutton来在axes上显示图像
function pushbutton1_Callback(hObject, eventdata, handles)
axes(handles.axes1);
% a7 = imshow(pic);
pic = imread(‘435-2.bmp’);
       image(pic);
    waitforbuttonpress;
pt = get(handles.axes1,’currentpoint’);%注意:问题出在这里。
m = round(pt(1,2));
n = round(pt(1,1));
H_text1=findobj(‘tag’,’text1’);
H_text2=findobj(‘tag’,’text2’);
% 将像素坐标点显示在文本框中 
set(H_text1,’string’,num2str(m));
set(H_text2,’string’,num2str(n));
这样就可以得到坐标值了。
但是问题又来了,按下pushbutton,坐标值只能得到一次,想得到第二次,就得再按一次pushbutton,问题是,怎么样连续得到坐标值呢?



正确做法:下面是我的解决办法

function pushbutton1_Callback(hObject, eventdata, handles)%这个是设置鼠标事件的,点击一下鼠标,会出现相应细胞的一些参数

% hObject    handle to pushbutton1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
global img;
try
    
if(length(img)>0)
    axes(handles.axes1);
    imageHandle=imshow(img);
    set(imageHandle,’ButtonDownFcn’,@ImageClickCallback);
%设置鼠标点击响应函数为对对象

                                                                                    % imageHandle响应,而不是对axes1响应

end
catch
end


function ImageClickCallback ( objectHandle , eventData )
axesHandle  = get(objectHandle,’Parent’);
%获取坐标轴axesHandles
coordinates = get(axesHandle,’CurrentPoint’); 
%获取点击的处的坐标
coordinates = coordinates(1,1:2);

x=ceil(coordinates (1));
y=ceil(coordinates (2));

end


你可能感兴趣的:(matlab中GUI界面点击图片获取坐标问题的解决方法)