상세 컨텐츠

본문 제목

영상의 산술 연산

영상처리/OpenCV Python

by cepiloth 2021. 5. 25. 10:25

본문

728x90
반응형

덧셈 연산

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

#dst(x,y) = saturate(srcl(x,y)+src2(x,t))

#OpenCV
cv.add(src1, src2, dst=None, mask=None, dtype=None) -> dst

 

가충치 합(weighted sum)

두 영상의 같은 위치에 존재하는 픽셀 값에 대하여 가중합을 계산하여 결과 영상의 픽셀값으로 설정
보통 alpha + beta = 1 이 되도록 설정 -> 두 입력 영상의 평균 밝기를 유지

#dst(x,y) = saturate(alpha * srcl(x,y) + beta * src2(x,t))

#OpenCV
cv.addWeighted(src1, alpha, src2, beta, gammadst=None, mask=None, dtype=None) -> dst

 

평균 연산(average)

가중치를 alpha = beta = 0.5 로 설정한 가중치 합

#dst(x,y) = (srcl(x,y) + src2(x,t)) / 2

#OpenCV
cv.addWeighted(src1, alpha, src2, beta, gamma, dst=None, mask=None, dtype=None) -> 

 

뺄셈 연산

두 영상의 같은 위치에 존재하는 픽셀 값에 대하여 뺄셈 연산을 수행하여 결과 영상의 픽셀 값으로 설정
뺄셈 결과가 0보다 작으면 픽셀 값을 0으로 설정(포화 연산)

#dst(x,y) = saturate(srcl(x,y) - src2(x,t))

#OpenCV
cv.subtract(src1, src2, dst=None, mask=None, dtype=None) -> dst

 

차이 연산

두 영상의 같은 위치에 존재하는 픽셀 값에 대하여 뺄셈 연산을 수행한 후, 그 절대값을 결과 영상의 픽셀 값으로 설정, 뺄셈 연산과 달리 입력영상의 순서에 영향을 받지 않음

#dst(x,y) = |srcl(x,y) - src2(x,t)|

#OpenCV
cv.absdiff(src1, src2, dst=None) -> dst

 

arithmetic.py

더하기, 가중치, 뺄셈등 산술 연산 예시

import sys
import numpy as np
import cv2
from matplotlib import pyplot as plt


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()

 

 

 

728x90
반응형

'영상처리 > OpenCV Python' 카테고리의 다른 글

컬러 영상과 색 공간  (0) 2021.05.25
영상의 논리 연산  (0) 2021.05.25
영상의 화소 처리 방법  (0) 2021.05.25
카메라와 동영상 처리하기 2  (0) 2021.05.12
카메라와 동영상 처리하기 1  (0) 2021.05.12

관련글 더보기

댓글 영역