[OpenCV] 02-5. Trackbar as the Color Palette
🐍Python/OpenCV

[OpenCV] 02-5. Trackbar as the Color Palette

728x90
반응형

<2-5. Trackbar as the Color Palette>

이번에는 OpenCV 창에 trackbar를 결합하는 것을 학습해볼 것이다.


  • cv2.getTrackbarPos(), cv2.createTrackbar() 함수에 대해서 배워볼 것이다.

Code Demo

색을 조절할 수 있는 간단한 기능을 만들어 볼 것 이다. BGR 색으로 지정할 수 있는 세가지 trackbars를 보여주는 창을 갖고 있다. Trackbars를 끌면 그에 따라 창의 색이 바뀐다. 기본적으로 초기 색을 검정색이다.

cv2.getTrackbarPos() 함수에 대해서, 첫 번째 argument는 trackbar의 이름이고, 두 번째는 창의 이름, 세 번째는 초기값, 네 번째는 최대 값, 다섯 번째는 매 trackbar 값이 변할 때 실행되는 callback 기능이다. Callback 기능은 항상 trackbar 위치인 기본 값을 가지고 있다. 지금의 경우 기능은 아무 것도 하지 않기에 그냥 지나친다.

Trackbar의 또 다른 중요한 기능은 버튼이나 스위치로 사용할 수 있다는 것이다. OpenCV는 기본적으로, 버튼 기능이 없다. 그래서 그러한 기능을 갖기 위해 trackbar를 사용하면 된다. 여기서는 스위치를 키면 기능이 작동하고, 아닐 경우 화면은 계속 검정색이 된다.


import numpy as np
import cv2

def nothing(x):
    pass

# 검정색 창을 만들자
img = np.zeros((512,512,3),np.uint8)
cv2.namedWindow('image')

# 색을 바꾸기 위한 trackbars 만들기
cv2.createTrackbar('R','image',0,255,nothing)
cv2.createTrackbar('G','image',0,255,nothing)
cv2.createTrackbar('B','image',0,255,nothing)

# On/Off 기능의 스위치를 만든다. 
switch = '0 : OFF \n 1: ON'
cv2.createTrackbar(switch,'image',0,1,nothing)

while(1):
    cv2.imshow('image',img)
    k = cv2.waitKey(1) & 0xFF
    if k == 27:
        break

    # 네 trackbar의 현 위치
    r = cv2.getTrackbarPos('R','image')
    g = cv2.getTrackbarPos('G','image')
    b = cv2.getTrackbarPos('B','image')
    s = cv2.getTrackbarPos(switch,'image')

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

cv2.destroyAllWindows()


처음에 색 trackbar를 움직였을 때는 스위치가 OFF(0)상태여서 색이 출력되지 않았다. 스위치를 1로 옮기니 색이 나온 것을 볼 수 있다.

728x90
반응형