웹 캠에서 영상을 받아오고, 실시간으로 사용자가 'u' (up) , 'd' (down) 버튼으로 감마를 조절할 수 있는 코드를 작성하겠습니다.
import cv2 as cv
import numpy as np
나중에 gamma 조절 함수의 반환값으로 np.uint8 타입을 써야하므로 numpy를 임포트합니다
gammaValue = 1.0 # 감마 기본값 초기화
이번 개발중 가장 오류가 많이 생긴 이유이자. 가장 기본적인 초기화를 (while 밖에) 해 줍니다.
만일 while문 안에 초기화 시키면 매초마다 frame을 읽어올 때 gammValue도 초기화 되기에 u, d으로 감마를 조정해도
다음 프레임부터는 1.0 감마로 출력되게 됩니다.
while True:
global gammaValue # 감마 초기값 전역변수 설정
ret, frame = cap.read()
if not ret:
break
key = cv.waitKey(1)
if key == ord('q'):
break
if key == ord('u'): # u 입력
gammaValue += 0.5
elif key == ord('d'): # d 입력
gammaValue -= 0.5
def gamma(f, gammaValue=1.0): # 감마 조절 알고리즘
f1 = f / 255.0
return np.uint8(255*(f1**gammaValue))
live = gamma(frame, gammaValue)
cv.imshow('gamma', live)
cap.release()
cv.destroyAllWindows()
위 공식을 구현한 gamma 함수를 사용해 매 프레임 마다 감마값 (미리 정의된 감마값) 으로 출력되게 됩니다.
재밌는건 감마가 0보다 작아지면 색 공간이 HSV(?) 처럼 변한다는 것입니다.
그러나 계속 d을 누르면 변화폭이 점점 작아집니다.
'개발' 카테고리의 다른 글
[정보처리산업기사 필기] 애플리케이션 (1) | 2023.08.30 |
---|---|
[정보처리산업기사 필기] 소스코드 빌드 (0) | 2023.08.30 |
[자기개발] Emotion (1) | 2023.05.29 |
[개발] 담배 피는 사람 분류 (합성곱 신경망) (2) | 2023.05.21 |
[개발] OpenCV 얼굴 모자이크 (0) | 2023.04.25 |