[opencv-python] 트랙바 만들기

2019. 7. 2. 00:47Python-이론/python-opencv

이번에는 여러 가지(색, ONOFF)등을 조절할 수 있는 트랙바를 만들어 보겠습니다. 

 

코드 

import numpy as np
import cv2


def onChange():
    pass


def trackBar():
    img = np.zeros((200, 512, 3), np.uint8)
    cv2.namedWindow("color Track Bar")

    cv2.createTrackbar('B', 'color Track Bar', 0, 255, onChange)
    cv2.createTrackbar('G', 'color Track Bar', 0, 255, onChange)
    cv2.createTrackbar('R', 'color Track Bar', 0, 255, onChange)

    switch = "0: OFF\n1: ON"
    cv2.createTrackbar(switch, 'color Track Bar', 0, 1, onChange)

    while True:
        cv2.imshow('color Track Bar', img)
        k = cv2.waitKey(1) & 0xFF

        if k == 27:
            break

        b = cv2.getTrackbarPos('B', 'color Track Bar')
        g = cv2.getTrackbarPos('G', 'color Track Bar')
        r = cv2.getTrackbarPos('R', 'color Track Bar')
        s = cv2.getTrackbarPos(switch, 'color Track Bar')

        if s == 0:
            img[:] = 0
        else:
            img[:] = [b, g, r]

    cv2.destroyAllWindows()


trackBar()

코드 설명

cv2.createTrackbar('B', 'color Track Bar', 0, 255, onChange)

트랙바를 만들면서 요소를 추가해준다. 첫요소는 어떤 값을 의미하는지 텍스트 값이고 두번째 요소는 윈도우 값인데 윈도우의 이름은 항상 동일해야한다. 그리고 0, 255는 값의 범위이다. 이벤트를 처리하기 위한 콜백함수 onChange가 있는데 우리는 아무 이벤트도 없기 때문에 pass하나뿐인 함수를 만들어준다. 

 

b = cv2.getTrackbarPos('B', 'color Track Bar')

만들어 놓은 트랙바의 값을 가져옵니다. 가져오기 위해서는 지정했을 때 사용한 값과 윈도우의 이름을 적어 주면 됩니다.

cv2.createTrackbar(switch, 'color Track Bar', 0, 1, onChange)

스위치 요소를 만들어서 1이면 색 trackBar가 작동하고 아니면 작동하지 않습니다. switch 값이 0이면 검은 화면이 나오고 1이면 지정된 색으로 나옵니다. 

결과