OpenCV에서 마우스와 키보드 이벤트를 처리하는 방법에 대한 간단한 예제 코드입니다.
마우스 입력
- 마우스 왼쪽 버튼 누르는 동안, 화면에 그림 그리기
키보드 입력
- ESC를 누르면 종료
- 좌우 화살표 키를 누르면 Brightness 변화
예제 코드
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
Mat img;
Point pt_last;
void on_mouse(int event, int x, int y, int flags, void*);
int main()
{
img = imread("lena512.bmp", IMREAD_GRAYSCALE);
if (img.empty())
{
cerr << "Failed to open image" << endl;
return 1;
}
namedWindow("img");
setMouseCallback("img", on_mouse);
imshow("img", img);
while (true)
{
int keycode = waitKeyEx(0);
if (27 == keycode)
{
break;
}
else if (0x250000 == keycode)
{
img -= 5;
imshow("img", img);
}
else if (0x270000 == keycode)
{
img += 5;
imshow("img", img);
}
}
return 0;
}
void on_mouse(int event, int x, int y, int flags, void*)
{
switch (event)
{
case EVENT_LBUTTONDOWN:
pt_last = Point(x, y);
cout << "EVENT_LBUTTONDOWN: " << x << ", " << y << endl;
break;
case EVENT_LBUTTONUP:
cout << "EVENT_LBUTTONUP: " << x << ", " << y << endl;
break;
case EVENT_MOUSEMOVE:
if (flags & EVENT_FLAG_LBUTTON)
{
line(img, pt_last, Point(x, y), Scalar(100, 255, 215));
imshow("img", img);
pt_last = Point(x, y);
}
break;
}
}
실행 결과
마우스 입력 결과
키보드 입력 결과