2018-01-29 15:48:06

▶ 마우스를 클릭할 때마다 대응하는 화소 값 출력하기


아래는 마우스로 창으로 띄운 이미지에 어떤 부분을 좌클릭했을 때 위치와 화소값을 알려 주는 예제이다. 우클릭할 때는 단순히 Hello!가 콘솔에 출력되게 했다. 


#include <opencv2/core.hpp>

#include <opencv2/highgui.hpp>

#include <iostream>


void onMouse(int event, int x, int y, int flags, void* param); 


int main()

{

cv::Mat image;

image = cv::imread("jecheon.jpg", CV_LOAD_IMAGE_GRAYSCALE); // 그레이 스케일로 영상 읽기


cv::imshow("Jecheon", image); //Jecheon이라는 창에 이미지 출력


cv::setMouseCallback("Jecheon", onMouse, reinterpret_cast<void*>(&image)); // 특정 창에 마우스 핸들러 설정


cv::waitKey(0);


    return 0;

}


void onMouse(int event, int x, int y, int flags, void* param)

{

cv::Mat *im = reinterpret_cast<cv::Mat*>(param);


switch (event) // 이벤트 전달

{

case CV_EVENT_LBUTTONDOWN: // 마우스 좌클릭시 이벤트

std::cout << "(" << x << ", " << y << "): " << static_cast<int>(im->at<uchar>(cv::Point(x, y))) << std::endl; // (x, y)에 있는 화소값 출력

break;

case CV_EVENT_RBUTTONDOWN: // 마우스 우클릭시 이벤트

std::cout << "Hello!" << std::endl; // Hello! 출력

break;

}

}


실행 결과는 아래와 같다. 


보다시피 특정 위치를 클릭했을 때는 위치와 화소값을, 우클릭했을 때는 Hello!가 콘솔에 출력되었다. 



<참고자료>

[1] 로버트 라가니에 지음, 이문호 옮김, "OpenCV를 활용한 컴퓨터 비전 프로그래밍 3/e", 에이콘