개발
[개발] OpenCV 감마 조절
노트북 산 김에 공부
2023. 4. 25. 20:14
웹 캠에서 영상을 받아오고, 실시간으로 사용자가 '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을 누르면 변화폭이 점점 작아집니다.