▶영상의 화소 처리 기법
→ 화소 처리(Point processing)
• 입력 영상의 특정 좌표 픽셀 값을 변경하여 출력 영상의 해당 좌표 픽셀 값으로 설정하는 연산입니다.
• 결과 영상의 픽셀 값이 정해진 범위(ex. 그레이스케일)에 있어야 합니다.
• 반전, 밝기 조절, 명암비 조절 등을 할 수 있습니다.
▶ 영상의 밝기 조절
→ 밝기 조절이란?
• 영상을 전체적으로 더욱 밝거나 어둡게 만드는 연산입니다.
→ 밝기 조절 수식
출력값이 0보다 작을 때는 0으로 반환하고, 255보다 클 때는 255로 출력하는 작업이 필요합니다.
이를 saturate연산이라고 합니다. (saturate는 Limit, Clip 이라고도 함)
→ 영상의 밝기 조절을 위한 영상의 덧셈 연산 - cv2.add
OpenCV에서는 cv2.add 함수로 덧셈 연산을 제공하고 있습니다.
cv2.add 함수를 이용해서 각 픽셀값에 덧셈하여 밝기를 조절할 수 있습니다.
[함수 설명]
cv2.add(src1, src2, dst=None, mask=None, dtype=None) -> dst
• src1 : (입력) 첫 번째 영상 또는 스칼라
• src2 : (입력) 두 번째 영상 또는 스칼라
• dst : (출력) 덧셈 연산의 결과 영상
• mask : 마스크 영상
• dtype : 출력 영상(dst)의 타입. (e.g.) cv2.CV_8U, cv2.CV_32F 등
[참고 사항]
스칼라(scalar)는 실수 값 하나 또는 실수 값 네 개로 구성된 튜플입니다.
dst를 함수 인자로 전달하려면 dst의 크기가 src1, src2와 같아야 하며, 타입이 적절해야 합니다.
[예제 코드]
그레이스케일와 컬러영상, 두 가지 영상의 밝기를 조절해보겠습니다.
# 그레이스케일 영상 불러오기
src = cv2.imread('lenna.bmp', cv2.IMREAD_GRAYSCALE)
if src is None:
print('Image load failed!')
sys.exit()
# src + 100 이후, 픽셀값이 255보다 크면 0이 됨
dst = cv2.add(src, 100)
# np기능 이용
# .을 붙여서 실수로 만들기, np.unit8로 부호없는 정수로 변환
# clip 함수를 사용하여, src + 100 일 때, 픽셀 값이 0보다 작거나 255보다 크면
# 최솟값 0, 최댓값 255로 Limit 설정해주는 함수
#dst = np.clip(src + 100., 0, 255).astype(np.uint8)
cv2.imshow('src', src)
cv2.imshow('dst', dst)
cv2.waitKey()
# 컬러 영상 불러오기
src = cv2.imread('lenna.bmp')
if src is None:
print('Image load failed!')
sys.exit()
# (src, 100) <- 이렇게 선언하면 BGR 중 B 값에만 100이 할당 되어 Blue 색상만 밝아짐
dst = cv2.add(src, (100, 100, 100, 0))
#dst = np.clip(src + 100., 0, 255).astype(np.uint8)
cv2.imshow('src', src)
cv2.imshow('dst', dst)
cv2.waitKey()
cv2.destroyAllWindows()
[결과]
이처럼 밝기가 변화했습니다.
→ 넘파이 함수를 이용한 밝기 조절 - np.clip
np.clip을 이용하여 saturate연산을 할 수 있습니다.
[함수 설명]
np.clip(a, a_min, a_max, out=None)
[예제 코드]
# 그레이스케일
dst = np.clip(src + 100., 0, 255).astype(np.uint8) # astype 타입 변환 함수
# 컬러 영상
dst = np.clip(src + 100., 0, 255).astype(np.uint8) # astype 타입 변환 함수
[주의할 점]
.을 붙여서 실수로 만들어줘야 합니다.
데이터 타입을 np.unit8(부호가 없는 정수)로 변환해야 합니다.
'Language - Python(Opencv)' 카테고리의 다른 글
Python Opencv - #13, 영상 색상 처리 (0) | 2021.11.22 |
---|---|
Python Opencv - #12, 영상 산술 연산 (0) | 2021.11.22 |
Python Opencv - #10, 동영상 응용 (0) | 2021.11.22 |
Python Opencv - #9, Trackbar (0) | 2021.11.22 |
Python Opencv - #8, 키보드 & 마우스 이벤트 처리 (0) | 2021.11.22 |