반응형
황선규 박사님의 OpenCV 강의를 공부하면서 정리하였습니다.
영상의 명암비 조절
명암비(Contrast)는 밝은 곳과 어두운 곳 사이에 드러나는 밝기 정도의 차이를 의미합니다.
1. 기본적인 명암비 조절 - np.clip
그레이스케일의 픽셀값을 조정하여 명암비를 조절하는 법을 알아보겠습니다.
np.clip으로 saturate 연산을 구현하였고 아래의 방정식을 구현하였습니다.
[예제 코드]
src = cv2.Imread('lenna.bmp', cv2.IMREAD_GRAYSCALE)
if src is None:
print('Image load failed!')
sys.exit()
alpha = 1 # 기울기
dst = np.clip((1 + alpha) * src - 128 * alpha), 0, 255).astype(np.unit8)
cv2.imshow('src', src)
cv2.imshwo('dst', dst)
cv2.waitKey()
cv2.destroyAllWIndows()
alpha값을 변경해주면서 원하는 명암비를 설정해줄 수 있습니다.
[결과]
명암비가 변경되었습니다.
2. 영상의 자동 명암비 조절 - 정규화 함수(cv2.normalize)
OpenCV에서 cv2.normalize() 함수를 이용하면 히스토그램 스트레칭 기법을 구현할 수 있습니다.
히스토그램 스트레칭(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.
히스토그램 스트레칭은 NORM_MINMAX
• dtype: 결과 영상의 타입
• mask: 마스크 영상
[예제 코드]
src = cv2.imread('Hawkes.jpg', cv2.IMREAD_GRAYSCALE)
if src is None:
print('Image load failed!')
sys.exit()
dst = cv2.normalize(src, None, 0, 255, cv2.NORM_MINMAX) # 히스토그램 스트레칭은 NORM_MINMAX
# 넘파이로 히스토그램 스트레칭 구현
gmin = np.min(src)
gmax = np.max(src)
dst = np.clip((src - gmin) * 255. / (gmax - gmin), 0, 255).astype(np.unit8))
cv2.imshow('src', src)
cv2.imshow('dst', dst)
cv2.waitKey()
cv2.destroyAllWindows()
[결과]
이처럼 히스토그램 스트레칭을 적용하면 명암비가 적절하게 조절됩니다.
반응형
'Python > 파이썬 OpenCV 공부' 카테고리의 다른 글
[파이썬 OpenCV] 특정 색상 영역 추출 - cv2.inRange (3) | 2020.09.28 |
---|---|
[파이썬 OpenCV] 히스토그램 평활화 - cv2.equlizeHist (0) | 2020.09.28 |
[파이썬 OpenCV] OpenCV 함수만으로 히스토그램 그리기 - cv2.line 활용 (0) | 2020.09.28 |
[파이썬 OpenCV] 영상의 히스토그램 분석하기 - cv2.calcHist (0) | 2020.09.28 |
[파이썬 OpenCV] 컬러 영상과 색 공간 - 색상 분리(cv2.split), 색상 결합(cv2.merge), 색 변환(cv2.cvtColor) (0) | 2020.09.27 |