본문 바로가기

PyImageSearch

OpenCV - 감마 보정(Gamma Correction)

사람의 눈 VS 카메라 센서

실제 눈으로 보는 것 보다 카메라로 찍으면 다른데?! 하는 순간이 있는데, 

그건 사람의 눈과 카메라 센서는 빛을 인식하는 부분에 있어 차이가 있기 때문이다.

 

이모티콘 출처 <a href="https://www.flaticon.com/kr/free-icons/" title="눈 아이콘">눈 아이콘 제작자: Smashicons - Flaticon</a> <a href="https://www.flaticon.com/kr/free-icons/" title="카메라 아이콘">카메라 아이콘 제작자: Freepik - Flaticon</a>ㅏ

 

 

사람의 눈                      카메라 센서
  • 광량이 두배가 되어도 체감 밝기는 두배만큼 밝게 인식하지 않음
  • 밝은 톤보다 어두운 톤에 훨씬 민감함
  • 광량에 비례해서 신호를 생성함

따라서, 이 차이를 보정하기 위해 감마보정(Gamma Correction)이 필요하다.

 

2. 감마 보정이란? (Power Law Transform)

감마 보정은 픽셀 강도를 전형적인 전원 법칙(power-law) 변환으로 매핑하는 기법

  1. 입력 영상의 픽셀 값을 [0,255] 범위에서 [0.0,1.0] 범위로 정규화
  2. 아래 식을 적용하여 보정

  • I = 정규화된 입력 픽셀 값
  • G = 사용자가 지정하는 감마 값
    • G<1  →  출력이 더 어두워짐
    • G>1  →  출력이 더 밝아짐
    • G=1  →  원본과 동일
  • O = 변환 후 출력 픽셀 값 (다시 [0,255] 범위로 스케일) 

 

3. cv2.LUT(image, table) 을 사용해 감마보정 수행

3-1. 코드

from matplotlib import pyplot as plt
import numpy as np
import cv2

def adjust_gamma(image, gamma=1.0):
	invGamma = 1.0 / gamma
	table = np.array([((i / 255.0) ** invGamma) * 255
		for i in np.arange(0, 256)]).astype("uint8")
	return cv2.LUT(image, table)
    
args = {
"image": "example_02.png"
}

original = cv2.imread(args["image"])

# 여러 감마값을 확인
for gamma in np.arange(0.0, 3.5, 0.5):
	# 감마=1이면 아무 변화가 없으므로 무시하기
	if gamma == 1:
		continue

	gamma = gamma if gamma > 0 else 0.1
	adjusted = adjust_gamma(original, gamma=gamma)
	cv2.putText(adjusted, "g={}".format(gamma), (10, 30),
		cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0, 0, 255), 3)
	plt_imshow("Images", np.hstack([original, adjusted]))

 

3-2. 결과해석

 

 

  • Gamma < 1 (예: 0.1, 0.5): 원본보다 훨씬 어두워져 디테일이 소실됨
  • Gamma = 1.5: 어두운 이미지에서 디테일이 적절하게 살아남
  • Gamma ≥ 2.0: 너무 밝아져 ‘washed out’ 현상 발생

 

 


출처

https://pyimagesearch.com/2015/10/05/opencv-gamma-correction/?_ga=2.251268485.2009553045.1749964459-254784589.1749433426

 

OpenCV Gamma Correction - PyImageSearch

In this tutorial I'll show you how to implement a super fast, easy to use Gamma correction function using Python and OpenCV. Click here to learn more.

pyimagesearch.com

'PyImageSearch' 카테고리의 다른 글

CDF(누적 분포 함수)  (0) 2025.06.16
OpenCV - Histogram Matching  (0) 2025.06.16
OpenCV - Histogram Equalization  (0) 2025.06.16
OpenCV - Image Histograms  (0) 2025.06.15
OpenCV - Edge detection  (0) 2025.06.14