매트랩에서 이미지로 놀다보면 가끔 이미지에서 위치를 읽어오고 싶을 때가 있다.
그럴 때 유용하게 쓰일 수 있는 예제 코드이다.
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. 좀 더 확장판 - 여기선 폴더 안의 사진을 차례로 불러와서 원하는 수 만큼의 클릭을 하고 넘어가게 한다.
'Enginius > Matlab' 카테고리의 다른 글
keyDownListener + figCloseHandler + figTimer (0) | 2013.08.01 |
---|---|
Use Microsoft Kinect in Matlab (2013~) (6) | 2013.07.24 |
Make a VIDEO with Matlab (writeVideo) (0) | 2013.07.02 |
Check Point in Polygon (inpolygon) (0) | 2013.05.13 |
Field를 만들고, 특정 Field에서 원하는 값 가져오기 (interp2) (0) | 2013.04.24 |