[OpenCV] 마우스
마우스 사용해서 이미지에 주석
OpenCV에는 왼쪽 클릭 및 오른쪽 클릭과 같은 다양한 마우스 동작을 감지하는 마우스 이벤트 감지 기능이 있다. 일단 이미지에서 마우스를 사용하여 사각형을 렌더링을 해보자.
-
마우스 이벤트를 사용해서 왼쪽 버튼이 눌리면 누른 위치에 대한 정보 저장, 누른걸 놓으면 또 한번 위치 저장해서 사각형 그리기.
-
사용자가
q
키(ASCII 코드: 113)를 눌러 응용 프로그램 스크립트를 종료할 때까지 이미지를 계속 표시하게 while 루프를 사용한다. 사용자가 루프를 종료하면 창을 파괴. -
사용자가 이전 주석을 모두 지울 수 있도록 루프 안에서
c
키(ASCII 코드: 99)를 누르면 창의 이미지를 원본 이미지를 읽을 때 만들어진 복사본으로 재설정된다.
이미지에 사각형 그리는 콜백 함수
코드
import cv2
# 사각형 그리는데 사용하는 두 개의 점 저장할 리스트
top_left_corner = []
bottom_right_corner = []
def drawRectangle(action, x, y, flags, *userdata):
# 전역 변수 참조
global top_left_corner, bottom_right_corner
# 왼쪽 마우스 버튼을 눌렀을 때 왼쪽 상단 모서리 리스트에 현재 위치 저장
if action == cv2.EVENT_LBUTTONDOWN:
top_left_corner = [(x,y)]
# 마우스 왼쪽 버튼을 놓으면 오른쪽 아래 모서리 리스트에 현재 위치 저장
elif action == cv2.EVENT_LBUTTONUP:
bottom_right_corner = [(x, y)]
# 사각형 그리기
cv2.rectangle(image, top_left_corner[0], bottom_right_corner[0], (0,255,0),2,8)
cv2.imshow("Window", image)
setMouseCallback()
setMouseCallback(winname, onMouse, userdata)
- winname : 창의 이름
- onMouse : 마우스 이벤트에 대한 콜백 기능
- userdata : 콜백에 전달된 선택적 매개 변수
코드
# 이미지 읽기
image = cv2.imread("../Input/sample.jpg")
# 그린걸 지우는 데 유용하게 임시 이미지를 만들기
temp = image.copy()
# 이름있는 창 만들기
cv2.namedWindow("Window")
# 마우스 이벤트가 발생할 때 호출되는 GUI 기능
cv2.setMouseCallback("Window", drawRectangle)
키 이벤트
q
키를 누르면 창이 닫히고 c
키를 누르면 그려진 사각형 초기화
코드
k = 0
while k != 113:
cv2.imshow("Window", image)
k = cv2.waitKey(0)
if k == 99:
image = temp.copy()
cv2.imshow("Window", image)
cv2.destroyAllWindows()
결과
Author And Source
이 문제에 관하여([OpenCV] 마우스), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@rlath/OpenCV-마우스저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)