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()
[실행 결과]
Trackbar 이용한 이진화 처리 개념에 대한 설명이였습니다.