728x90
반응형
덧셈 연산

- 두 영상의 같은 위치에 존재하는 픽셀 값을 더하여 결과 영상의 픽셀 값으로 설정
- 덧셈 결과가 255보다 크면 픽셀 값을 255로 설정 (포화 연산)

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와 같아야 하며, 타입이 적절해야 한다.
가중치 합(weighted sum)

- 두 영상의 같은 위치에 존재하는 픽셀 값에 대하여 가중합을 계산하여 결과 영상의 픽셀 값으로 설정
- 보통 α + β = 1이 되도록 설정 -> 두 입력 영상의 평균 밝기를 유지
- α + β > 1일 때 픽셀값이 255보다 커지는 경우가 발생
평균 연산(average)
- 가중치를 α = β = 0.5 로 설정한 가중치 합


cv2.addWeighted(src1, alpha, src2, beta, gamma, dst=None, dtype = None) -> dst
- src1 : 첫 번째 영상
- alpha : 첫 번째 영상 가중치
- src2 : 두 번째 영상. src1과 같은 크기 & 영상 타입.
- beta : 두 번째 영상 가중치
- gamma : 결과 영상에 추가적으로 더할 값
- dst : 가중치 합 결과 영상
- dtype : 출력 영상(dst)의 타입
뺄셈 연산

- 두 영상의 같은 위치에 존재하는 픽셀 값에 대하여 뺄셈 연산을 수행하여 결과 영상의 픽셀 값으로 설정
- 뺄셈 결과가 0보다 작으면 픽셀 값을 0으로 설정 (saturate 연산)
검은색이 0, 흰색이 255이므로 검은 색에 해당하는 부분만 픽셀 값이 유지연산 할 두 이미지를 보았을 때 결과가 어떻게 나올 지 예상할 수 있어야 함
cv2.substract(src1, src2, dst=None, mask=None, dtype=None) -> dst
- src1 : 첫 번째 영상 또는 스칼라
- src2 : 두 번째 영상 또는 스칼라
- dst : 뺄셈 연산 결과 영상
- mask : 마스크 영상
- dtype : 출력 영상(dst)의 타입
차이 연산

- 두 영상의 같은 위치에 존재하는 픽셀 값에 대하여 뺄셈 연산을 수행한 후, 그 절댓값을 결과 영상의 픽셀 값으로 설정
- 뺄셈 연산과 달리 입력 영상의 순서에 영향을 받지 않음
- 변화가 있는 부분을 찾을 때 사용

cv2.absdiff(src1, src2, dst=None) -> dst
- src1 : 첫 번째 영상 또는 스칼라
- src2 : 두 번째 영상 또는 스칼라
- dst : 차이 연산 결과 영상(차영상)
실습
src1 = cv2.imread('lenna256.bmp', cv2.IMREAD_GRAYSCALE)
src2 = cv2.imread('square.bmp', cv2.IMREAD_GRAYSCALE)
if src1 is None or src2 is None:
print('Image load failed!')
sys.exit()
# 덧셈 / 가중치합 / 뺄셈 / 차이 연산
dst1 = cv2.add(src1, src2, dtype=cv2.CV_8U)
dst2 = cv2.addWeighted(src1, 0.5, src2, 0.5, 0.0)
dst3 = cv2.subtract(src1, src2)
dst4 = cv2.absdiff(src1, src2)
plt.subplot(231), plt.axis('off'), plt.imshow(src1, 'gray'), plt.title('src1')
plt.subplot(232), plt.axis('off'), plt.imshow(src2, 'gray'), plt.title('src2')
plt.subplot(233), plt.axis('off'), plt.imshow(dst1, 'gray'), plt.title('add')
plt.subplot(234), plt.axis('off'), plt.imshow(dst2, 'gray'), plt.title('addWeighted')
plt.subplot(235), plt.axis('off'), plt.imshow(dst3, 'gray'), plt.title('subtract')
plt.subplot(236), plt.axis('off'), plt.imshow(dst4, 'gray'), plt.title('absdiff')
plt.show()
- 실행 결과 :

연산 결과 이미지가 어떻게 나올지 예측할 수 있어야 함.
영상의 논리 연산
비트단위 AND, OR, XOR, NOT 연산
cv2.bitwise_and(src1, src2, dst=None, mask=None) -> dst
cv2.bitwise_or(src1, src2, dst=None, mask=None) -> dst
cv2.bitwise_xor(src1, src2, dst=None, mask=None) -> dst
cv2.bitwise_not(src1, dst=None, mask=None) -> dst
- src1 : 첫 번째 영상 또는 스칼라
- src2 : 두 번째 영상 또는 스칼라
- dst : 출력 영상
- mask : 마스크 영상
- 참고사항
- 각각의 픽셀 값을 이진수로 표현하고, 비트(bit) 단위 논리 연산을 수행

- 각각의 픽셀 값을 이진수로 표현하고, 비트(bit) 단위 논리 연산을 수행
728x90
반응형
'OpenCV' 카테고리의 다른 글
| OpenCV 영상처리 - 히스토그램 분석(cv2.calcHist) (0) | 2024.03.18 |
|---|---|
| OpenCV 영상처리 - 컬러 영상과 색 공간 (0) | 2024.03.18 |
| OpenCV 영상처리 - 밝기 조절 (0) | 2024.03.18 |
| OpenCV 동영상 전환 이펙트 (0) | 2024.03.16 |
| OpenCV 트랙바(cv2.createTrackbar) (0) | 2024.03.16 |