Language - Python(Opencv)

Python Opencv - #9, Trackbar

KimTory 2021. 11. 22. 20:45

▶ 트랙바 사용하기 - cv2.createTrackbar

 트랙바에 대해 알아보고 트랙바를 이용하여 그레이스케일 레벨을 표현하도록 해보겠습니다.

 

 트랙바(Trackbar)는 프로그램 동작 중 사용자가 지정한 범위 안의 값을 선택할 수 있는 컨트롤 입니다.

 OpenCV에서 제공하는 그래픽 사용자 인터페이스 입니다.

 

 윈도우 창에 트랙바를 생성하여 영상의 속성값을 바꿔줄 수 있습니다.

 

→ 트랙바 생성 함수 - cv2.createTrackbar

 cv2.createTrackbar()는 트랙바를 생성해주는 함수입니다.

 트랙바 이벤트 콜백 함수를 불러옵니다.

 

[함수 설명]

cv2.createTrackbar(trackbarName, windowName, value, count, onChange) -> None

 

• trackbarName: 트랙바 이름

• windowName: 트랙바를 생성할 창 이름. 

• value: 트랙바 위치 초기값

• count: 트랙바 최댓값. 최솟값은 항상 0

• onChange: 트랙바 위치가 변경될 때마다 호출할 콜백 함수 이름

 

[예시 코드]

img = np.zeros((480, 640), np.uint8)
cv2.namedWindow('image')

# 창이 생성된 이후에 호출해야 한다.
cv2.createTrackbar('level', 'image', 0, 16, on_level_change)

cv2.imshow('image', img)
cv2.waitKey()
cv2.destroyAllWindows()

 트랙바 이벤트 콜백 함수 - onChange

 트랙바 이벤트 콜백 함수를 지정하여 생성함수의 입력값에 넣어줘야 합니다.

 

[함수 설명]

onChange(pos) -> None

 

 트랙바 이벤트 콜백 함수는 다음 형식을 따릅니다.

 

[예시 코드]

 그레이스케일 영상의 레벨을 표현하는 함수를 작성해보겠습니다.

def on_level_change(pos):
    global img # 전역 변수, 함수 외부에 있는 img 변수 가져옴
    # value = pos  <- 좌측으로 선언 시, 트랙바 value 대로 값 변경됨
    # value = np.clip(value, 0, 255) 넘파이에서 제공하는 함수를 이용해도 된다.
    value = pos * 16 # 16 X 16 = 256 이므로 255가 아니라 0값으로 바뀜
    
    if value >= 255: # 256일때 강제로 255로 변경
        value = 255

    img[:] = value
    cv2.imshow('image', img)

 

 255의 값을 0부터 16단계로 나눠서 표현하는 함수입니다.

 

▶ 트랙바를 이용해 그레이스케일 레벨 표현하기

 앞서 구현한 코드를 조합하여 트랙바로 그레이스케일 레벨을 표현해보겠습니다.

 

[코드]

def on_level_change(pos):
    global img # 전역 변수 개념이며, 함수 밖의 변수 가져와서 처리함
    # value = pos <- 선언 시, trackbar value 대로 설정됨
    # value = np.clip(value, 0, 255) 넘파이에서 제공하는 함수를 이용해도 된다.
    value = pos * 16 # 16 X 16 = 256 이므로 255가 아니라 0값으로 바뀜
    
    if value >= 255: # 256일때 강제로 255로 변경
        value = 255

    img[:] = value
    cv2.imshow('image', img)


img = np.zeros((480, 640), np.uint8)
cv2.namedWindow('image')

# 창이 생성된 이후에 호출해야 한다.
cv2.createTrackbar('level', 'image', 0, 16, on_level_change)
#cv2.createTrackbar('level', 'image', 0, 255, on_level_change) <- value 255

cv2.imshow('image', img)
cv2.waitKey()
cv2.destroyAllWindows()

 

[실행 결과]

 

 

value = pos / 할당 시, 255 설정 가능

 

Trackbar 이용한 이진화 처리 개념에 대한 설명이였습니다.