관심쟁이 영호

[#3] OpenCV ㅣ 키보드 제어 ㅣ 마우스 제어 본문

학교공부/OpenCV

[#3] OpenCV ㅣ 키보드 제어 ㅣ 마우스 제어

관심쟁이 영호 2020. 10. 30. 01:30
반응형

안녕하세요!

관심쟁이 영호입니다. 

모두들 공부는 잘되고 계신가요!?

저 또한 열심히하려고 노력중이랍니다 ㅠㅠ

 


오늘의 OpenCV공부는요!

키보드 제어 및 마우스 제어입니다!

 

쉽게말하자면!

사용자가 키보드나 마우스의 조작이 있을 때, 프로그램이 인지하도록 하는겁니다.

 

키보드 제어

이전시간에 한 것과 아주 비슷해요!  바로 살펴볼게요.

 

위의 사진을 보시면!

"waitKey"가 키보드 값에 따라 다른 리턴값이 된다는 것을 파악할 수 있어요!

27은 esc를 뜻합니다.

 

그럼 계속해서 마우스 제어를 해보겠습니다!

 

마우스 제어

마우스 제어를 하려면 콜백함수를 불러야해요! 이것을 사용하기 위해서는 "콜백함수"에 대한 이해가 필요해요.

 

콜백함수란?

일반적으로 함수를 실행하면 해당함수가 완료될때까지 다음 작업을 수행하지 않아요!

하지만 콜백함수는 해당 함수를 호출하게되면 다른객체에게 해당 일을 넘겨주고 프로그램은 다른 일을 할 수 있게되는거랑 마찬가지입니다!

 

임의로 콜백함수를 지정해줄 수도 있지만

OpenCV에서는 콜백함수를 미리 지정해놓았어요!

콜백 지정법을 먼저 코드로 보여드리겠습니다!

 

잘 보이실까요..?

화면을 보시면 윈도우창이 두개가 있어요!

하나는 "영호의 마우스 제어창", 또 다른 하나는 "영호의 그냥 창" 인데요.

 

"영호의 마우스 제어창"에 콜백함수를 지정해두어서 여기에만 마우스 반응이 일어나게 됩니다!

그럼 차근차근 살펴볼게요!

 

void onMouse(int, int, int, int, void*)

이 구문은 프로그램이 처음에 컴파일될 때 이런 함수가 있다는 것을 표기해두기 위함이에요!

 

아래의

void onMouse(int event, int x, int y, int flags, void* param)을 살펴볼게요.

 

event = 일어나는 이벤트에 대한 값

int x, int y = 마우스 이벤트가 일어나는 좌표

int flags = 마우스와 동시에 특수키 (alt, shift, ctrl)이 눌러져 있는가에 대한 값이에요!

void* param = 추가적인 사용자 정의 함수에요!

 


여기까지 보시면 이해가 잘 안될겁니다!

하지만 더 자세히 볼게요!

구문중에 setMouseCallback이라는 함수가 있습니다. 이것은 콜백함수를 등록하는 것이며,

마우스 이벤트로 미리 지정되어있는 함수를 부른다고 생각하시면 됩니다!

 

setMouseCallback("영호의 마우스 제어창", onMouse, 0)을 풀어쓰면

마우스 콜백함수를 등록할게요. 해당 콜백함수가 행동할 창은 "영호의 마우스 제어창"이구요, 해당 콜백함수가 실행되면 onMouse함수를 실행해주세요. 

 

라고 설명이 됩니다!

키보드 제어보다 힘들죠 ㅠㅠ 저두 이해하느라 힘들었어요..

 


오늘은 여기까지 공부를 했습니다!

다음은 트랙바제어, 화면에 그리기, 글자입력 등등을 배워볼게요!

 

보시고 이해가 안되시거나 오류를 발견하신다면!

언제든지 댓글로 말씀해주세요.

그럼 여기까지 하겠습니다.

 

오늘하루도 행복하세요!

300x250
Comments