-
[OpenCV 튜토리얼] 4. 마우스 및 트랙바 이벤트 처리Python/OpenCV 2020. 11. 17. 14:40SMALL
OpenCV에는 마우스 및 트랙바를 이용해 이벤트를 처리할 수 있는 모듈이 내장되어있다.
간단한 예제로 살펴보자.
1. 마우스 이벤트
import cv2 import numpy as np def on_mouse(event, x, y, flags, param): if event == cv2.EVENT_LBUTTONDOWN: if flags & cv2.EVENT_FLAG_SHIFTKEY: cv2.rectangle(param[0], (x - 5, y - 5), (x + 5, y + 5), (255, 0, 0)) else: cv2.circle(param[0], (x, y), 5, (255, 0, 0), 3) elif event == cv2.EVENT_RBUTTONDOWN: cv2.circle(param[0], (x, y), 5, (255, 0, 0), 3) elif event == cv2.EVENT_LBUTTONDBLCLK: param[0] = np.zeros(param[0].shape, np.uint8) + 255 cv2.imshow('img', param[0]) img = np.zeros((512, 512, 3), np.uint8) + 255 cv2.imshow('img', img) cv2.setMouseCallback('img', on_mouse, [img]) cv2.waitKey() cv2.destroyAllWindows()
on_mouse 함수는 마우스와 함께 눌린 키가 쉬프트 키면 (cv2.EVENT_FLAG_SHIFTKEY) 네모를 생성하여 만들어주고
그냥 클릭하였을 경우 동그라미를 생성해준다.
그리고 더블 클릭을 했을 경우 생성된 모든 객체를 지워지고 새로운 화면을 띄워준다.
2. 트랙바 이벤트
import cv2 import numpy as np # trackbar handler def on_change(pos): global img r = cv2.getTrackbarPos('R', 'img') g = cv2.getTrackbarPos('G', 'img') b = cv2.getTrackbarPos('B', 'img') img[:] = (b, g, r) cv2.imshow('img', img) img = np.zeros((512, 512, 3), np.uint8) cv2.imshow('img', img) # create trackbar cv2.createTrackbar('R', 'img', 0, 255, on_change) cv2.createTrackbar('G', 'img', 0, 255, on_change) cv2.createTrackbar('B', 'img', 0, 255, on_change) # initialize trackbar position cv2.setTrackbarPos('B', 'img', 255) cv2.waitKey() cv2.destroyAllWindows()
on_change 함수는 img 변수를 전역 선언하고 R, G, B 세 개의 트랙바에서 얻은 위치 값으로 rgb값을 얻는다.
cv2.createTrackbar 함수를 이용해 세 개의 트랙바를 생성해주고 초기 설정값을 B가 255인 파란색으로 설정해준다.
[참고 문헌]
1. OpenCV reference
2. 김동근(2018), "Python으로 배우는 Open CV 프로그래밍", 가메출판사
LIST'Python > OpenCV' 카테고리의 다른 글
[OpenCV 튜토리얼] 5. 관심영역 ROI(Region Of Interest) (0) 2020.11.24 [OpenCV 튜토리얼] 3. 도형 그리기 및 문자열 출력하기 (0) 2020.11.17 [OpenCV 튜토리얼] 2. 비디오 캡쳐와 화면 표시 (0) 2019.07.09 [OpenCV 튜토리얼] 1. OpenCV 영상(이미지) 입출력 (0) 2019.06.17 댓글