[파이썬 OpenCV] 이미지 밝기 조절
최근에 openCV에 대해서 배우고 있습니다.
Gray 이미지는 픽셀 값이 0 ~ 255 사이값으로 이루어져 있습니다.
1. I'(x,y) = I(x,y)+val
간단히 이미지에 +value, -value를 하여 밝기를 조절할 수 있습니다.
하지만 더한 값이 max값인 255를 초과하면 오버플로우가 발생하게 됩니다. 언더플로우도 마찬가지입니다. val값은 50으로 설정했습니다.
def brightness(gray, val):
res_img = gray.copy()
res_img = res_img - val
return res_img
위 사진과 같이 단순히 값을 뺴게 되면 원하는 밝기 조절이 된 이미지를 가질 수 없습니다. 이미지의 밝기를 조절할 때 오버플로우되는 곳들을 막아서 max255, ,min0을 유지시키면 원하는 이미지 밝기 조절을 할 수 있습니다.
2. I'(x,y) = clip(0, 255, I(x,y)+val
밝기의 범위를 오버플로우 하지 않기 위해서는 넘파이 함수를 이용해, np.clip을 사용할 수 있습니다.
np.clip(img, min, max)으로 배열 img 중 최솟값(min) 보다 작은 것은 min으로, 최댓값(max) 보다 큰 것은 max로 대체해줍니다. 저는 min에 0, max 255를 넣었습니다.
#np. clip(res_img - 50., 0, 255). astype(np.uint8)
#. astype(np.uint8)은 양수만 표현 가능하게 해 줍니다. 0~255
# value값 뒤에. 을 붙여서 실수로 만듭니다.
def brightness(gray, val):
res_img = gray.copy()
res_img = np.clip(res_img - 50., 0, 255). astype(np.uint8) #val=-50
return res_img
3. opencv에서는 cv2.add, cv2.subtract 함수를 제공해줍니다.
이 함수들을 사용하여 각 픽셀 값에 덧셈과 뺄셈으로 오버플로우 없이 밝기를 조절할 수 있습니다. 2번과 똑같은 결과를 확인할 수 있습니다.
def brightness(gray, val):
res_img = gray.copy()
res_img = cv2.subtract(res_img, val)
return res_img
'공부 > Study' 카테고리의 다른 글
[퀴즈공부] 메모 (0) | 2022.04.13 |
---|---|
[깃허브데스크톱 에러] Authentication failed. Some common reasons include: (0) | 2022.04.07 |
[Security Study] OverTheWire: Wargames "Bandit" 문제 풀기 후기 (0) | 2022.01.06 |
[HTML5 스터디] Study 7 도트 타일 맵을 찍어 보았다. (0) | 2022.01.03 |
[Visual Studio] 내가 보려고 메모한 Visual Studio 단축키 및 편의 사항 (0) | 2021.12.29 |
댓글