Python/OpenCV

[OpenCV 튜토리얼] 4. 마우스 및 트랙바 이벤트 처리

Hannah_ko 2020. 11. 17. 14:40
SMALL

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