본문 바로가기
OpenCV

OpenCV 영상처리 - 밝기 조절

by Kwonys 2024. 3. 18.
728x90
반응형

화소 처리 (Point processing)

  • 입력 영상의 특정 좌표 픽셀 값을 변경하여 출력 영상의 해당 좌표 픽셀 값으로 설정하는 연산

src(x,y) : 입력 x,y의 픽셀값

dst(x,y) : 출력 x,y의 픽셀값

 

  • 결과 영상의 픽셀 값이 정해진 범위(ex. 그레이스케일)에 있어야 함.
  • 반전, 밝기 조절, 명암비 조절 등

밝기 조절

  • 영상을 전체적으로 더욱 밝거나 어둡게 만드는 연산

밝기 조절 수식

saturate : 일정 값 이상 또는 이하로 넘어가지 않도록 제한 하는 함수

 

영상의 밝기 조절을 위한 영상의 덧셈 연산

cv2.add(src1, src2, dst=None, mask=None, dtype=None) -> dst
  • src1 : (입력) 첫 번째 영상 또는 스칼라
  • src2 : (입력) 두 번째 영상 또는 스칼라
  • dst : (출력) 덧셈 연산의 결과 영상
  • mask : 마스크 영상
  • dtype : 출력 영상(dst)의 타입.
    • ex. cv2.CV_8U, cv2.CV_32F 등
  • 참고사항
    • 스칼라(scalar)는 실수 값 하나 또는 실수 값 네 개로 구성된 튜플
    • dst를 함수 인자로 전달하려면 dst의 크기가 src1, src2와 같아야 하며, 타입이 적절해야 한다.

 

그레이스케일 밝기 100 증가

# 그레이스케일 영상 불러오기
src = cv2.imread('lenna.bmp', cv2.IMREAD_GRAYSCALE)

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

dst = cv2.add(src, 100)
#dst = np.clip(src + 100., 0, 255).astype(np.uint8)

cv2.imshow('src', src)
cv2.imshow('dst', dst)
cv2.waitKey()
  • 실행결과 :

 

컬러영상 밝기 100 증가

# 컬러 영상 불러오기
src = cv2.imread('lenna.bmp')
dst1 = cv2.add(src, (100, 100, 100, 0)) # 그레이스케일처럼 (src, 100) 이렇게 하면 blue 성분만 100 추가
dst2 = np.clip(src + 100., 0, 255).astype(np.uint8)

# 출력 이미지의 사이즈가 커서 이를 줄이는 코드도 추가하였다.
src = cv2.resize(src, dsize=(0, 0), fx=0.5, fy=0.5)
dst1 = cv2.resize(dst1, dsize=(0, 0), fx=0.5, fy=0.5)
dst2 = cv2.resize(dst2, dsize=(0, 0), fx=0.5, fy=0.5)
  • 실행결과 : 

728x90
반응형