영상처리/OpenCV

트랙바 생성

성혜영 2022. 6. 8. 13:36

프로그램 개발 진행 시 알고리즘에서 사용되는 메서드나 함수 등의 매개 변수나 인수의 값을 조절하면서 최적의값을 찾기 위해 여러 번 테스트 진행 -> 반복되는 변경 작업이나 컴파일/빌드 등으로 불필요한 작업 대폭 늘어남.

 

트랙바 : 일종의 스크롤바로 슬라이더 바의 형태를 지님. 일정 범위 내의 값을 변경할 때 주로 사용하며, 적절한 임곗값을 찾거나 변경하기 위해 사용

 

# 트랙 바 생성 함수

cv2.createTrackbar(

    trackbarName,

    windowName,

    value,

    count,

    onChange

)

 

트랙바 생성함수는 트랙바 이름(trackbarName)을 정의하고 사전에 정의된 윈도우 이름(windowName)에 부착. 값(value)은 트랙 바의 초기 슬라이더 위치, 변경할때마다 갱신

최댓값(count)은 트랙 바의 최대 위치 설정. 콜백함수(onChange)는 슬라이더가 위치를 변경할 때마다 호출되는 함수를 설정. 사용자 정의 함수나 익명 함수 등을 정의할 수 있으며, 트랙 바의 슬라이더 값(value)을 매개 변수로 전달.

 

# 트랙 바 위치 반환 함수

retval = cv2.getTrackbarPos(

    trackbarName,

    windowName

)

 

사전에 정의된 윈도우 이름(windowName)의 트랙 바 이름(trackbarName)의 위치값(retval) 반환. 이 위치값은 트랙 바 생성 함수의 값과 콜백함수에서 전달하는 값과 동일

 

#트랙바 적용

import cv2

import numpy as np



def onChangeBlue(pos):

    global b

    b = pos

    cv2.imshow("Palette", createImage(b, g, r))



def createImage(b, g, r):

    return np.full((500, 500, 3), (b, g, r), dtype=np.uint8)



b, g, r = 0, 0, 0

cv2.namedWindow("Palette")

cv2.createTrackbar("Blue", "Palette", 55, 255, onChangeBlue)

cv2.createTrackbar("Green", "Palette", 0, 255, lambda x:x)

cv2.createTrackbar("Red", "Palette", 0, 255, lambda x:x)



while True:

    g = cv2.getTrackbarPos("Green", "Palette")

    r = cv2.getTrackbarPos("Red", "Palette")

   

    cv2.imshow("Palette", createImage(b, g, r))

    if cv2.waitKey(33) & 0xFF == ord('q'):

        break



cv2.destroyAllWindows()

 

트랙 바 생성 함수는 값(value)을 ref 키워드로 참조 전달. > value 변수를 정의하고 임의의 값으로 초기화. 이후 window 이름을 갖는 윈도우 화면 생성. 트랙 바 생성 함수에 값(value)을 ref 키워드와 함께 사용. 반복문 while 을 사용해 트랙 바의 위치 값을 33ms 마다 받아와 이미지를 생성하고 출력. 콜백 함수(onChange)도 활용해 트랙바 함수 적용. blue 트랙 바에 대한 초기값을 55로 할당. > 트랙바의 위치를 55의 위치로 이동할 뿐 55에 대한 연산 진행은 하지 않음. b 변수를 전역변수로 사용해 전체적으로 사용 가능케 함. (b 구문이 없다면 33ms 마다 반복문이 실행되어 b 변수에 대한 작업을 확인하기 어렵고, g와 r변수에 대한 변경만 작동될것.

 

'영상처리 > OpenCV' 카테고리의 다른 글

선형 방정식 시스템의 해 찾기  (0) 2022.06.08
색상 공간 변환  (0) 2022.06.08
각종 그리기 함수  (0) 2022.06.08
도형 그리기  (0) 2022.06.08
이미지 연결  (0) 2022.06.07