Computer Vision/opencv(python)

[16] 5) 영상의 명암비 조절

jwjwvison 2021. 3. 18. 11:29
  • 명암비(contrast)란?
    • 밝은 곳과 어두운 곳 사이에 드러나는 밝기 정도의 차이
    • 컨트라스트, 대비

 

  • 기본적인 명암비 조절 함수

 

  • 효과적인 명암비 조절 함수

 

  • 기본적인 명암비 조절 예제
import sys
import cv2
import numpy as np  

src=cv2.imread('lenna.bmp',cv2.IMREAD_GRAYSCALE)

if src is None:
    print('image load failed!')
    sys.exit()

alpha=0.5
dst=np.clip((1+alpha)*src - 128*alpha,0,255).astype(np.uint8)         
#이 수식의 결과의 범위를 지정 #실수형으로 나오므로 int형으로 변환 필요

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


 

  • 히스토그램 스트레칭(Histogram stretching)
    • 영상의 히스토그램이 그레이스케일 전 구간에서 걸쳐 나타나도록 변경하는 선형 변환 기법

 

cv2.normalize(src,dst,alpha=None,beta=None,norm_type=None,dtpye=None,maks=None) -> dst

 • src: 입력 영상
 • dst 결과 영상
 • alpha: ( 노름 정규화인 경우 ) 목표 노름 값 , (원소 값 범위 정규화인 경우) 최솟값
 • beta: ( 원소 값 범위 정규화인 경우 ) 최댓값
 • norm_type: 정규화 타입 . NORM_INF, NORM_L1, NORM_L2, NORM_, NORM_MINMAX
 • dtype 결과 영상의 타입
 • mask: 마스크 영상

 

  • 히스토그램 스트레칭을 이용한 명암비 자동 조절
import sys
import numpy as np
import cv2


src = cv2.imread('Hawkes.jpg', cv2.IMREAD_GRAYSCALE)

if src is None:
    print('Image load failed!')
    sys.exit()

gmin, gmax, _, _ = cv2.minMaxLoc(src)
dst = cv2.normalize(src, None, 0, 255, cv2.NORM_MINMAX)
#dst = ((src - gmin) * 255. / (gmax - gmin)).astype(np.uint8)

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

cv2.destroyAllWindows()