Manual object counter inside an image
2 次查看(过去 30 天)
显示 更早的评论
Hi
How can I program a very simple manual counter on top of an image that I show (GUI). Basically, I wish to load an image to a axes and every time I click the mouse a point and its counting number appears next to it.
Thanks.
0 个评论
采纳的回答
Image Analyst
2014-1-6
From the help:
[x,y] = ginput gathers an unlimited number of points until you press the Return key.
Put some code in like this (untested)
message = sprintf('Click points.\nHit return when done.');
button = questdlg(message, 'Continue?', 'Yes', 'No', 'Yes');
drawnow; % Refresh screen to get rid of dialog box remnants.
if strcmpi(button, 'No')
return;
end
[x,y] = ginput();
count = length(x);
3 个评论
Image Analyst
2014-1-6
编辑:Image Analyst
2014-1-6
Only after it's done when you can say
plot(x, y, 'r+', 'MarkerSize', 24, 'LineWidth', 3);
If you want it to mark after each one you'll have to put ginput(1) inside a while loop
% Display an image.
imshow('moon.tif');
hold on;
% Initialize counter.
count = 0;
message = sprintf('Click as many points as you want.\nHit return when done.');
title(message, 'FontSize', 20);
button = questdlg(message, 'Continue?', 'OK', 'Cancel', 'OK');
drawnow; % Refresh screen to get rid of dialog box remnants.
if strcmpi(button, 'Cancel')
return;
end
% Begin loop where user clicks points over display (plot or image or whatever).
while count < 1000 % or whatever failsafe you want.
% User clicks one point. If user types Enter/Return, x is empty.
[x,y] = ginput(1);
if isempty(x)
break;
end
% Put a cross over the point.
plot(x, y, 'r+', 'MarkerSize', 24, 'LineWidth', 3);
% Increment the count.
count = count + 1
% Save coordinates (if desired).
allX(count) = x;
allY(count) = y;
end
Please mark as Accepted if this answers your question.
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Data Exploration 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!