Koo's.Co

[OpenCV] 명암비 조절 본문

Python/영상처리

[OpenCV] 명암비 조절

kth321 2023. 1. 5. 15:38

1. 명암비(Contrast)

 - 밝은 곳과 어두운 곳 사이에 드러나는 밝기 정도의 차이

 - 컨트라스트, 대비

 - 보통 영상처리를 할 때, 명암비를 높여 영상을 선명하게 만듬

 - 글씨나 물체를 좀 더 잘 인식하기 위한 용도로 사용 가능

2. 명암비 조절

 - src 이미지에 일정한 가중치를 곱한 후 saturate 연산을 적용

전체적으로 포화가 되는 부분이 많아지거나 최대 밝기가 너무 낮아지는 문제가 있다.

import sys
import cv2
import numpy as np

src = cv2.imread('image.bmp', cv2.IMREAD_GRAYSCALE)
if src is None:
  sys.exit()
  
alpha = 1.0
dst = np.clip((1 + alpha) * src - 128 * alpha).astype(np.uint8)

cv2.imshow('src', src)
cv2.imshow('dst', dst)
cv2.waitKey()
cv2.destroyAllWindows()

명암비가 올라간 사진

3. Histogram Stretching

영상의 히스토그램이 그레이스케일 전 구간에 걸쳐 나타나도록 변경하는 선형 변환

cv2.normalize(src, dst, alpha=None, beta=None, norm_type=None, dtype=None,
		mask=None) -> dst

 - src: 입력 영상

 - dst: 결과 영상, None을 입력

 - alpha: 최솟값

 - beta: 최댓값

 - norm_type: 정규화 타입, NORM_INF, NORM_L1, NORM_L2, NORM_MINMAX

 - dtype: 결과 영상 타입

 - mask

 

norm_type을 NORM_MINMAX로 설정하고 alpha=0, beta=255로 설정해 전체 범위로 정규화할 수 있다

(좌) 기존 이미지 (우) histogram stretching 적용

src = cv2.imread('img.jpg', cv2.IMREAD_GRAYSCALE)
dst = cv2.normalize(src, 0, 0, 255, cv2.NORM_MINMAX)
cv2.imshow('src', src)
cv2.imshow('dst', dst)
cv2.waitKey()
cv2.destroyAllWindows()
Comments