1. 키보드 이벤트 처리
// 키보드 입력을 처리하는 함수
int waitKey(int delay = 0);
- delay : 키입력을 기다리는 시간. 지정하지 않거나 0 또는 음수일 경우 무한히 기다림.
- 반환값이 눌러진 키값(아스키 코드), 눌러진 게 없을 경우 -1이 반환됨.
- 특수키의 경우)
// 특수키의 입력을 처리하는 함수
int waitKeyEx(int delay = 0);
2. 마우스 이벤트 처리
openCV에서 마우스 이벤트를 처리하려면 먼저 마우스 콜백 함수를 등록하고, 이후 마우스 콜백 함수에 마우스 이벤트를 처리하는 코드를 추가해야 함.
// 특정 창에 마우스 콜백 함수를 등록할 때 사용하는 함수
void setMouseCallback(const String& winname, MouseCallback onMouse,
void* userdata =0);
- winname 창에서 마우스 이벤트가 발생하면 onMouse로 등록된 콜백 함수가 자동으로 호출되도록 설정.
- userdata 인자에는 사용자가 마우스 콜백 함수에 전달하고 싶은 데이터를 void* 형식으로 전달할 수 있음. (콜백함수에 전달할 데이터가 없을 경우 userdata 인자 설정 x)
- onMouse에는 마우스 콜백 함수가 지정되는데, 마우스 콜백 함수는 마우스 이벤트가 발생할 때 자동으로 호출되는 함수로, 4개의 정수형과 하나의 void* 타입을 인자로 가지며 void를 반환형으로 사용.
typedef void (*MouseCallback)(int event, int x, int y, int flags, void* userdata);
- event에는 MouseEventTypes로 정의된 열거형 상수 중 하나가 전달.
- x, y에는 마우스 이벤트가 발생한 좌표가 전달.
- flags는 마우스 이벤트가 발생할 때의 마우스 or 키보드의 상태 정보를 담고 있음.
- userdata에는 setMouseCallback() 함수에서 설정한 사용자 데이터의 포인터가 전달. 만약 userdata가 설정하지 않았다면 항상 0값이 전달됨.
MouseEventTypes 열거형 상수 | 값 | 설명 |
EVENT_MOUSEMOVE | 0 | 마우스가 창 위에서 움직이는 경우 |
EVENT_LBUTTONDOWN | 1 | 마우스 왼쪽 버튼을 누른 경우 |
EVENT_RBUTTONDOWN | 2 | 마우스 오른쪽 버튼을 누른 경우 |
EVENT_MBUTTONDOWN | 3 | 마우스 가운데 버튼을 누른 경우 |
EVENT_LBUTTONUP | 4 | 마우스 왼쪽 버튼을 떼는 경우 |
EVENT_RBUTTONUP | 5 | 마우스 오른쪽 버튼을 떼는 경우 |
EVENT_MBUTTONUP | 6 | 마우스 가운데 버튼을 떼는 경우 |
EVENT_LBUTTONDBLCLK | 7 | 마우스 왼쪽 버튼을 더블클릭하는 경우 |
EVENT_RBUTTONDBLCLK | 8 | 마우스 오른쪽 버튼을 더블클릭하는 경우 |
EVENT_MBUTTONDBLCLK | 9 | 마우스 가운데 버튼을 더블클릭하는 경우 |
EVENT_MOUSEWHEEL | 10 | 마우스 휠을 앞뒤로 돌리는 경우 |
EVENT_MOUSEHWHEEL | 11 | 마우스 휠을 좌우로 움직이는 경우 |
↑ MouseEventTypes 열거형 상수
MouseEventFlags 열거형 상수 | 값 | 설명 |
EVENT_FLAG_LBUTTON | 1 | 마우스 왼쪽 버튼이 눌려 있음 |
EVENT_FLAG_RBUTTON | 2 | 마우스 오른쪽 버튼이 눌려 있음 |
EVENT_FLAG_MBUTTON | 4 | 마우스 가운데 버튼이 눌려 있음 |
EVENT_FLAG_CTRLKEY | 8 | Ctrl 키가 눌려 있음 |
EVENT_FLAG_SHIFTKEY | 16 | Shift 키가 눌려 있음 |
EVENT_FLAG_ALTKEY | 32 | Alt 키가 눌려 있음 |
↑ MouseEventFlags 열거형 상수
3. 트랙바 사용하기
// 트랙바 생성 함수
int createTrackbar(const String& trackbarname, const String& winname,
int* value, int count, TrackbarCallback onChange = 0,
void* userdata = 0);
- winname 이름의 창에 trackbarname 이름의 트랙바를 부착. 트랙바가 움직일 때마다 onChange에 해당하는 트랙바 콜백 함수가 호출.
- 트랙바의 최소 위치는 항상 0, 최대 위치는 count 값으로 지정.
- value 인자에는 만들어둔 정수형 변수의 주소 값을 설정하면, 트랙바 위치가 해당 변수에 자동으로 저장.
- 트랙바 콜백 함수에 전달하고 싶은 데이터가 있을 시 userdata 인자를 통해 void* 형식으로 전달.
- onChange 인자는 트랙바 콜백 함수인데, 트랙바 콜백 함수는 트랙바 위치 변경될 때 자동으로 호출되는 함수로 형식은 다음과 같음.
typedef void (*TrackbarCallback)(int pos, void* userdata);
- int와 void*타입의 인자 두 개를 가짐. pos에는 현재 트랙바의 위치 정보가 전달. userdata에는 createTrackbar() 함수에서 지정한 사용자 데이터 포인터 값이 전달.
// 트랙바의 현재 위치
int getTrackbarPos(const String& trackbarname, const String& winname);
void setTrackbarPos(const String& trackbarname, const String& winname, int pos);
- 프로그램 동작 중 트랙바 위치를 강제로 특정 위치로 옮기려고 할 때 사용 가능.
- pos에 트랙바를 이동할 위치를 지정.
'Computer Vision' 카테고리의 다른 글
OpenCV 주요 기능 - 5. 유용한 OpenCV 기능 (0) | 2020.02.14 |
---|---|
OpenCV 주요 기능 - 4. OpenCV 데이터 파일 입출력 (0) | 2020.02.14 |
OpenCV 주요 기능 - 2. 다양한 그리기 함수 (0) | 2020.02.13 |
OpenCV 주요 기능 - 1. 카메라와 동영상 파일 다루기(2) (0) | 2020.02.13 |
OpenCV 주요 기능 - 1. 카메라와 동영상 파일 다루기(1) (0) | 2020.02.13 |
댓글