import cv2
title = 'mouse event'
img = cv2.imread('./white.jpg')
cv2.imshow(title, img)
def onMouse(event, x, y, flags, param):
print(event, x, y)
if event == cv2.EVENT_LBUTTONDOWN:
cv2.circle(img, (x, y), 30, (0, 0, 0), -1)
cv2.imshow(title, img)
cv2.setMouseCallback(title, onMouse)
while True:
if cv2.waitKey(0) & 0xFF == 27:
break
cv2.destroyAllWindows()
title이라는 이름의 창을 하나 만들고,
onMouse 함수를 선언한 후,
setMouseCallback(windowName, onMouse [, param])를 통해서 마우스콜백함수로 설정한다.
마우스의 이벤트를 감지해서 계속 반환하고 만약 좌측 버튼 클릭 시 원을 그린다.
setMouseCallback(windowName, onMouse [, param]) - 마우스 이벤트를 설정해주는 함수
onMouse - windowName에서 받아온 (event, x, y, flags, param)형태의 값을 이용해 작동하는 자체 제작 함수
마우스 이벤트들
cv2.EVENT_(L/R)BUTTONDBLCLK - 버튼 더블클릭 할 때
cv2.EVENT_(L/R)BUTTONDOWN - 버튼 누를 때
cv2.EVENT_(L/R)BUTTONUP - 버튼 누른 거 뗄 때
cv2.EVENT_MOUSEHWHEEL - 가로 휠 굴릴 때
cv2.EVENT_MOUSEMOVE - 마우스 움직일 때
cv2.EVENT_MOUSEWHEEL - 세로 휠 굴릴 때
<추측>
onMouse 함수가 어떻게 선언하고 작동하는지를 자세히 모르겠다.
물론 onMouse함수가 마우스 움직임을 감지해서 발생한 움직임과 해당 좌표값 x와 y, 그리고 컨트롤, 쉬프트, 알트 등의 키 flags를 전달해주는 함수인 것은 알겠다.
그런데 이게 언어 자체에서 미리 선언되어있고 우리가 그걸 오버라이딩해서 쓰는 함수인가?
어떻게 이벤트를 받아오고, 해당 좌표값을 받아오는거지?
'OpenCV' 카테고리의 다른 글
[OpenCV_01_19_트랙바를 이용한 색 조정] (0) | 2022.12.16 |
---|---|
[OpenCV_01_18_플래그를 이용한 동그라미 그리기] (0) | 2022.12.16 |
[OpenCV_01_16_키 이벤트] (0) | 2022.12.15 |
[OpenCV_01_15_창 관리 API 사용하기] (0) | 2022.12.14 |
[OpenCV_01_14_글씨 그리기] (0) | 2022.12.13 |