Python/파이썬 OpenCV 공부

[파이썬 OpenCV] 트랙바를 이용한 그레이스케일 레벨 표현하기 - cv2.createTrackbar

AI 꿈나무 2020. 9. 27. 12:53
반응형

황선규 박사님의 OpenCV 강의를 공부하면서 정리하였습니다.

 


트랙바 사용하기 - cv2.createTrackbar

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

 

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

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

 

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

 

1. 트랙바 생성 함수 - 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()

 

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

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

 

[함수 설명]

onChange(pos) -> None

 

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

 

[예시 코드]

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

def on_level_change(pos):
    global img # 밖에있는 img를 갖고 옴

    value = pos * 16 # 16 X 16 = 256 이므로 255가 아니라 0값으로 바뀜
    # value = np.clip(value, 0, 255) 넘파이에서 제공하는 함수를 이용해도 된다.

    if value >= 255: # 256일때 강제로 255로 변경
        value = 255

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

 

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

 

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

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

 

[코드]

def on_level_change(pos):
    global img # 밖에있는 img를 갖고 옴

    value = pos * 16 # 16 X 16 = 256 이므로 255가 아니라 0값으로 바뀜
    # value = np.clip(value, 0, 255) 넘파이에서 제공하는 함수를 이용해도 된다.

    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.imshow('image', img)
cv2.waitKey()
cv2.destroyAllWindows()

 

[실행 결과]

 

 

 

 트랙바로 그레이스케일 픽셀 값을 조절해보았습니다.

 

 

반응형