setMouseCallback() 함수를 사용하여 마우스 이벤트를 처리하는 예제 코드를 코드 4-11에 나타냈습니다. 이 예제 프로그램은 마우스 왼쪽 버튼이 눌리거나 떼어진 좌표를 콘솔 창에 출력하고, 마우스 왼쪽 버튼을 누른 상태로 마우스를 움직이면 마우스 움직임 궤적을 영상 위에 노란색으로 표시합니다. 이 예제 코드는 내려받은 예제 파일 중 ch04/mouse 프로젝트에서 확인할 수 있습니다.
코드 4-11 마우스 이벤트 처리 예제 프로그램 [ch04/mouse]
01 #include "opencv2/opencv.hpp" 02 #include <iostream> 03 04 using namespace cv; 05 using namespace std; 06 07 Mat img; 08 Point ptOld; 09 void on_mouse(int event, int x, int y, int flags, void*); 10 11 int main(void) 12 { 13 img = imread("lenna.bmp"); 14 15 if (img.empty()) { 16 cerr << "Image load failed!" << endl; 17 return -1; 18 } 19 20 namedWindow("img"); 21 setMouseCallback("img", on_mouse); 22 23 imshow("img", img); 24 waitKey(0); 25 26 return 0; 27 } 28 29 void on_mouse(int event, int x, int y, int flags, void*) 30 { 31 switch (event) { 32 case EVENT_LBUTTONDOWN: 33 ptOld = Point(x, y); 34 cout << "EVENT_LBUTTONDOWN: " << x << ", " << y << endl; 35 break; 36 case EVENT_LBUTTONUP: 37 cout << "EVENT_LBUTTONUP: " << x << ", " << y << endl; 38 break; 39 case EVENT_MOUSEMOVE: 40 if (flags & EVENT_FLAG_LBUTTON) { 41 line(img, ptOld, Point(x, y), Scalar(0, 255, 255), 2); 42 imshow("img", img); 43 ptOld = Point(x, y); 44 } 45 break; 46 default: 47 break; 48 } 49 }