반응형

OpenCV Python 마우스 이벤트 예제입니다.



최초작성 2024. 5. 16



마우스 커서를 움직여서 왼쪽 마우스 버튼을 누르면 해당 위치에 초록색점이 찍히고 터미널에 좌표가 출력됩니다. 

 




터미널에 초록색 점에 해당되는 좌표가 출력됩니다.

 

(x,y)=(167, 132)

(x,y)=(352, 283)




전체 소스코드입니다.

 

import cv2
import numpy as np
import queue


def mouse_callback(event, x, y, flags, param):

    # 마우스 왼쪽 버튼 클릭시만 감지합니다.
    if event == cv2.EVENT_LBUTTONDOWN:
        print(f'(x,y)=({x}, {y})')

        # 마우스 커서 좌표를 큐에 삽입합니다.
        q.put((x, y))


# 큐를 생성합니다.
q = queue.Queue()

# 윈도우를 생성하고 마우스 콜백함수를 연결합니다.
cv2.namedWindow('result')
cv2.setMouseCallback('result', mouse_callback)


# 빈 넘파이 배열을 생성합니다.
img = np.zeros((512,512,3), np.uint8)


# 코드 가독성을 위해 초록색과 ESC 키를 상수로 저장합니다.
green_color = (0, 255, 0)
esc_key = 27


# 무한히 반복해야 합니다.
while(True):

    # 큐에 값이 있다면
    if not q.empty():

        # 큐에서 좌표를 꺼내서
        pos = q.get()

        # 초록색 원을 그려줍니다.
        cv2.circle(img, pos, 10, green_color, -1)
       
    # 이미지를 다시 출력합니다.
    cv2.imshow('result', img)

    # ESC 키누르면 종료합니다.
    if cv2.waitKey(1) & 0xFF == esc_key:
        break


# 윈도우 자원을 해제합니다.
cv2.destroyAllWindows()







반응형

문제 발생시 지나치지 마시고 댓글 남겨주시면 가능한 빨리 답장드립니다.


제가 쓴 책도 한번 검토해보세요 ^^

+ Recent posts