본문 바로가기

Enginius/Matlab

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. 좀 더 확장판 - 여기선 폴더 안의 사진을 차례로 불러와서 원하는 수 만큼의 클릭을 하고 넘어가게 한다.