MATLAB how to get mouse click coordinates
29,294
Solution 1
Let's assume that you've plotted the image with handle imageHandle
that:
imageHandle = imshow(imageObj);
You should assign the ButtonDownFcn
to the image handle not the axes handle that:
set(imageHandle,'ButtonDownFcn',@ImageClickCallback);
and get the mouse coordinates from this function as follows:
function ImageClickCallback ( objectHandle , eventData )
axesHandle = get(objectHandle,'Parent');
coordinates = get(axesHandle,'CurrentPoint');
coordinates = coordinates(1,1:2);
%// then here you can use coordinates as you want ...
end
You can try this small demo to check my answer:
function demoOnImageClick
clc;clear;
imObj = rand(500,500);
figure;
hAxes = axes();
imageHandle = imshow(imObj);
set(imageHandle,'ButtonDownFcn',@ImageClickCallback);
function ImageClickCallback ( objectHandle , eventData )
axesHandle = get(objectHandle,'Parent');
coordinates = get(axesHandle,'CurrentPoint');
coordinates = coordinates(1,1:2);
message = sprintf('x: %.1f , y: %.1f',coordinates (1) ,coordinates (2));
helpdlg(message);
end
end
Solution 2
You can get the axes handle from the image handle by
ah = get( imageHandle, 'Parent' );
Then you can get the mouse click position by
p = get( ah, 'CurrentPoint' );
Author by
HelloASP
Updated on July 09, 2022Comments
-
HelloASP almost 2 years
I have made my GUI using GUIDE. I have an axes (tag=axes1). An image is displayed in the axes. When i click on the image(inside axes) I need to get the coordinates. I get the coordinate values when image is not added to axes.But image is displayed in axes do no obtain the axes. How to get the coordinates?
-
Sameh K. Mohamed about 11 years@HelloASP , you can accept the answer if it satisfy your requirements of the question to end the discussion in this question.
-
Michael Lorenzo almost 10 years@HelloASP please make sure to check Sameh's answers as correct. thnx :]
-
Svaberg about 9 yearsThanks for the example. Maybe replace
imshow
byimagesc
since not all Matlab users have the Image Processing Toolbox.