반응형

이미지 밝기 조절

이미지처리의 가장 기초적인 단계로써 밝기조절이 있다. 간단한 산술연산(더하기, 빼기 등)을 통해서 픽셀의 전체적인 밝기를 조절하여 색감을 변경할 수 있다. OpenCV에서는 이러한 작업을 위해서 몇가지 함수를 제공하고 있다.

앚둥이들의 이미지를 밝기 조절한 예시

 

덧셈연산

이미지에 특정 값을 더하여 밝기를 조절하는 방법이다.

cv2.add(src1, src2, dst=None, mask=None, dtype=None)
  • src1: 입력 이미지.
  • src2: 입력 이미지. 또는 스칼라 값. 또는 실수값 4개로 구성된 튜플.
  • mask: 마스크 이미지를 넣어주면, 해당 ROI에만 적용이 된다.
src = cv2.imread('lenna.bmp', cv2.IMREAD_GRAYSCALE)
dst = cv2.add(src, 50)
dst2 = src + 50 # np.clip(src+50, 0, 255).astype(np.uint8)

(우)이미지가 좀 이상하다

dst2를 보면, 그냥 src의 모든 원소에 50만큼 값을 더함으로써 밝기조절을 시행한것을 볼 수 있다. 하지만 이미지의 맨 오른쪽을 보면 이상하게 나온것을 볼 수 있다. 왜냐하면, 현재 자료형이 uint8이기 때문에, 255가 넘는 값은 다시 0으로 돌려버리기 때문이다. 만약 기존 220 픽셀값에 50을 더하여 270이 되었다면 이는 15라는 픽셀값으로 바뀌게 된다는 것이다. 이러한 현상을 방지하기 위해서는 cv2.add함수를 사용하거나, numpy에서 제공하는 clip함수를 사용하면 된다.

 

가중합 연산

두장의 이미지에 밝기를 조절하여 합치는 방법이다.

cv2.addWeighted(src1, alpha, src2, beta, gamma, dst=None, dtype=None)
  • src1: 첫번째 이미지.
  • alpha: 첫번째 이미지의 가중치.
  • src2: 두번째 이미지. 이때 src1과 같은 shape, dtype을 가져야 한다.
  • beta: 두번째 이미지의 가중치.
  • gamma: 결과 영상에 추가적으로 더할 값.
src1 = cv2.imread('field.bmp')
src2 = cv2.imread('airplane.bmp')
dst = cv2.addWeighted(src1, 0.6, src2, 0.4, 0)

이 함수를 사용하면 한장의 이미지 위에 다른 한장의 이미지를 투명하게 겹쳐 합성하는 방법이 가능해진다. $\alpha$와 $\beta$는 더했을때 1이 나오도록 하는것이 원칙이다.

 

뺄셈 연산

두장의 이미지의 차이를 구하는 방법이다. 강조하고 싶은 부분을 살리거나, 정지 이미지의 변화를 알아볼 때 많이 사용된다.

cv2.substract(src1, src2, dst=None, mask=None, dtype=None)
  • src1: 첫번째 이미지.
  • src2: 두번째 이미지. 또는 스칼라 값.
src1 = cv2.imread('lenna256.bmp')
src2 = cv2.imread('hole.bmp')
dst = cv2.subtract(src1, src2)

강조된 얼굴을 확인할 수 있다.

 

첫번째 이미지에서 두번째 이미지의 흰색 픽셀값인 255를 빼기 때문에 0보다 작은 값이 나타나게된다. 음수는 다시 0으로 포화되기 때문에 검정색으로 나타나게 된다. 반대로 가운데 검정색 픽셀값인 0은 빼도 영향을 주지 않기 때문에 픽셀값이 그대로 보존된다. 결과영상을 보면 얼굴 부분이 강조된 형태가 되는것을 확인할 수 있다.

cv2.absdiff(src1, src2, dst=None)
  • src1: 첫번째 이미지.
  • src2: 두번째 이미지. 또는 스칼라 값.
src1 = cv2.imread('cctv1.jpg')
src2 = cv2.imread('cctv2.jpg')
dst = cv2.absdiff(src1, src2)

응용분야에서 많이 사용된다.

 

이 방법은 차분 방법으로써 CCTV와 같이 정지되어있는 카메라로부터 변화를 체크하기위해서 많이 사용된다. 특히 딥러닝에서 배경와 ROI를 구분하기위해서도 많이 사용되는 방법이다(Matting 이라고 부른다).

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기