황선규 박사님의 OpenCV 강의를 공부하면서 정리하였습니다.
영상의 화소 처리 기법
화소 처리(Point processing)
• 입력 영상의 특정 좌표 픽셀 값을 변경하여 출력 영상의 해당 좌표 픽셀 값으로 설정하는 연산입니다.
• 결과 영상의 픽셀 값이 정해진 범위(ex. 그레이스케일)에 있어야 합니다.
• 반전, 밝기 조절, 명암비 조절 등을 할 수 있습니다.
영상의 밝기 조절
밝기 조절이란?
• 영상을 전체적으로 더욱 밝거나 어둡게 만드는 연산입니다.
밝기 조절 수식
출력값이 0보다 작을 때는 0으로 반환하고, 255보다 클 때는 255로 출력하는 작업이 필요합니다.
이를 saturate연산이라고 합니다.
1. 영상의 밝기 조절을 위한 영상의 덧셈 연산 - 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()
dst = cv2.add(src, 100)
# np기능 이용
# .을 붙여서 실수로 만들기, np.unit8로 부호없는 정수로 변환
#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()
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()
[결과]
이처럼 밝기가 변화했습니다.
2. 넘파이 함수를 이용한 밝기 조절 - np.clip
np.clip을 이용하여 saturate연산을 할 수 있습니다.
[함수 설명]
np.clip(a, a_min, a_max, out=None)
[예제 코드]
# 그레이스케일
dst = np.clip(src + 100., 0, 255).astype(np.uint8)
# 컬러 영상
dst = np.clip(src + 100., 0, 255).astype(np.uint8)
[주의할 점]
.을 붙여서 실수로 만들어줘야 합니다.
데이터 타입을 np.unit8(부호가 없는 정수)로 변환해야 합니다.
'Python > 파이썬 OpenCV 공부' 카테고리의 다른 글
[파이썬 OpenCV] 컬러 영상과 색 공간 - 색상 분리(cv2.split), 색상 결합(cv2.merge), 색 변환(cv2.cvtColor) (0) | 2020.09.27 |
---|---|
[파이썬 OpenCV] 영상의 산술 연산 - cv2.add, cv2.addWeighted, cv2.subtract, cv2.absdiff (0) | 2020.09.27 |
[파이썬 OpenCV] 동영상 전환 이펙트, 디졸브(dissolve)효과 (1) | 2020.09.27 |
[파이썬 OpenCV] 연산 시간 측정 방법 - cv2.TickMeter (0) | 2020.09.27 |
[파이썬 OpenCV] 트랙바를 이용한 그레이스케일 레벨 표현하기 - cv2.createTrackbar (0) | 2020.09.27 |