반응형
황선규 박사님의 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()
[실행 결과]
트랙바로 그레이스케일 픽셀 값을 조절해보았습니다.
반응형
'Python > 파이썬 OpenCV 공부' 카테고리의 다른 글
[파이썬 OpenCV] 동영상 전환 이펙트, 디졸브(dissolve)효과 (1) | 2020.09.27 |
---|---|
[파이썬 OpenCV] 연산 시간 측정 방법 - cv2.TickMeter (0) | 2020.09.27 |
[파이썬 OpenCV] 마우스를 이용해 그리기 - cv2.setMouseCallback (0) | 2020.09.27 |
[파이썬 OpenCV] 키보드 입력으로 출력된 영상 반전 시키기 - cv2.waitkey, ord() 함수 (0) | 2020.09.27 |
[파이썬 OpenCV] 동영상 저장하기 - cv2.VideoWriter 클래스 (0) | 2020.09.27 |