Get CLICK point in an Image
매트랩에서 이미지로 놀다보면 가끔 이미지에서 위치를 읽어오고 싶을 때가 있다.
그럴 때 유용하게 쓰일 수 있는 예제 코드이다.
1. main
clc;
clear all;
close all;
global cursor_pos;
global clicked_flag;
cursur_pos = [];
clicked_flag = 0;
%% 이미지를 읽어와서 클릭 위치를 disp한다.
img = imread('example.jpg');
fig = imshow(img);
drawnow;
set(fig, 'ButtonDownFcn',@buttonDownCallback);
fprintf('now click the image \n');
hold on;
while 1
if clicked_flag
cur_pos = cursor_pos(end, :);
fprintf('clicked @ (%.1f, %.1f) \n' ...
, cur_pos(1), cur_pos(2) );
clicked_flag = 0;
plot(cur_pos(1), cur_pos(2), 'ko' ...
,'MarkerFaceColor', 'g');
end
pause(.1);
end
hold off;
2. callback function
function buttonDownCallback(o,e)
global cursor_pos;
global clicked_flag;
p = get(gca,'CurrentPoint');
p = p(1,1:2);
% fprintf('click callback: (%.2f %.2f) \n'...
% , p(1), p(2));
cursor_pos = [cursor_pos ; p];
clicked_flag = 1;
end
3. 결과물
- 클릭을 막 하고 나면 전역 변수 cursur_pos에 클릭한 위치들이 들어가있을 것이다.
- 클릭한 위치에 초록색으로 원이 그려진다.
4. 좀 더 확장판 - 여기선 폴더 안의 사진을 차례로 불러와서 원하는 수 만큼의 클릭을 하고 넘어가게 한다.