2-9. 트랙바 사용하기
Trackbar (트렉바)
프로그램 동작 중 사용자가 지정된 범위 안 값을 선택할 수 있는 그래픽 인터페이스로써 OpenCV에서도 제공된다.
마우스와 비슷하게 트랙바를 생성 하는 함수가 있고 이벤트를 처리하는 콜백 함수를 정의해주어야 한다.
cv2.createTrackbar(trackbarName, windowName, value, count, onChange) -> None 함수로 트랙바를 생성한다.
trackbarName은 트랙바 이름, windowName은 트랙바가 생성될 창 이름, value는 트랙바 위치 초기값, count, 트랙바 최대값으로 최소값은 0, onChange는 트랙바 위치가 변경될 때마다 호출될 콜백 함수로써 onChange(pos) -> None 형식을 갖는다.
아래 코드는 강의 예제 코드 기반으로 컬러 이미지를 세 가지 트랙바를 사용해 만들어본 코드이다.
# 필요한 라이브러리 가져오기
import numpy as np
import cv2
# 콜백 함수 정의
def on_level_change_R(pos):
value = pos * 16
if value >= 255:
value = 255
img[:,:,2] = value
cv2.imshow('image', img)
def on_level_change_G(pos):
value = pos * 16
if value >= 255:
value = 255
img[:,:,1] = value
cv2.imshow('image', img)
def on_level_change_B(pos):
value = pos * 16
if value >= 255:
value = 255
img[:,:,0] = value
cv2.imshow('image', img)
# 480x640의 컬러 영상 만들기
img = np.zeros((480, 640, 3), np.uint8)
# OpenCV 창 만들기
cv2.namedWindow('image')
# RGB별 트랙바 생성
cv2.createTrackbar('level_R', 'image', 0, 16, on_level_change_R)
cv2.createTrackbar('level_G', 'image', 0, 16, on_level_change_G)
cv2.createTrackbar('level_B', 'image', 0, 16, on_level_change_B)
# 트랙바 움직임에 따른 창 업데이트
cv2.imshow('image', img)
# 아무 키나 눌러 종료 기다리기
cv2.waitKey()
# 창 닫기
cv2.destroyAllWindows()
아래 동영상은 코드 테스트 결과. 이것도 재밌었다.
동영상 서비스가 종료되어 해당 콘텐츠를 재생할 수 없습니다.
2-10. 연산 시간 측정 방법
cv2.TickMeter() -> tm
컴퓨터 비전은 대용량 데이터를 사용해 일련의 과정을 거처 최종 결과를 얻기 때문에 병목 현상이 일어나는 구간이나 최적화 구간을 찾기 위해 매 단계 연산 시간을 측정하여 관리 해야할 필요가 있다.
OpenCV에서 제공하는 TickMeter 클래스를 이용하면 연산 시간 측정이 가능하다.
tm은 cv2.TickMeter 객체로써 아래 표에 이 클래스 내 시간 측정에 사용할 함수를 정리해 두었다.
| 함수 | 설명 |
| tm.start() | 시간 측정 시작 |
| tm.stop() | 시간 측정 끝 |
| tm.reset() | 시간 측정 초기화 |
| tm.getTimeSec() | 측정 시간을 s (sec) 단위로 반환 |
| tm.getTimeMilli() | 측정 시간을 ms (mili sec) 단위로 변환 |
| tm.getTimeMicro() | 측정 시간을 us (micro sec) 단위로 변환 |
강의 예제로는 이미지를 불러와서 Canny 함수 처리가 얼마나 걸리는지 측정해보는 코드가 제공되었다. 글쓴이 컴퓨터 기준 첫 실행에서 76.3578ms 가 기록되었다. 이미지가 더 큰 파일을 테스트 해본다던가 아니면 같은 이미지로 여러번 Canny 함수 처리 해 평균 값을 봐야 더 정확한 테스트 벤치를 만들어 볼 수 있을 거 같다.

인증 타임
마우스에 이어서 트랙바도 처음 써본 python GUI라 좀 신기했다. 기존 예제는 그레이스케일 영상을 만드는 것이 였는데 코드를 수정해서 컬러 영상 출력으로 바꾸어 보았다. 간단하게 수정한거라 같은 내용을 반복하는 함수를 여러 개 만든 느낌이라 신경써서 작성했다면 하나의 콜백 함수로 전부 처리 하는 방식을 고민해 보았을거 같다. 연산 측정의 경우 다른 언어에서는 다른 클래스 함수로 써보았는데 python-OpenCV 클래스 함수는 처음이라 흥미로웠다. 이 후 만들어지는 코드들 연산 시간 측정 내용도 추가해서 지켜 보는 것도 흥미로울 거 같다.


#패스트캠퍼스 #패캠챌린지 #직장인인강 #직장인자기계발 #패스트캠퍼스후기 #OpenCV를 활용한 컴퓨터비전과 딥러닝 올인원 패키지 Online
패스트캠퍼스(FastCampus) 강의 둘러보러 가기
↓ ↓ ↓
패스트캠퍼스 [직장인 실무교육]
프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.
fastcampus.co.kr
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
'남돈내배 > 2022_FastCampus_환급이벤트' 카테고리의 다른 글
| 패스트캠퍼스 챌린지 15일차 - Ch3. 기본적인 영상 처리 기법 (0) | 2022.02.07 |
|---|---|
| 패스트캠퍼스 챌린지 14일차 - Ch2. OpenCV-Python 기초 사용법 (0) | 2022.02.06 |
| 패스트캠퍼스 챌린지 12일차 - Ch2. OpenCV-Python 기초 사용법 (0) | 2022.02.04 |
| 패스트캠퍼스 챌린지 11일차 - Ch2. OpenCV-Python 기초 사용법 (0) | 2022.02.03 |
| 패스트캠퍼스 챌린지 10일차 - Ch2. OpenCV-Python 기초 사용법 (0) | 2022.02.02 |