소스 뷰어

산출 연산 함수

사칙연산

  • cv2.add(src1, src2[, dst[, mask[, dtype]]]) : 두 개의 배열 혹은 배열과 스칼라의 각 원소 간 합을 계산
    • src1 : 첫 번째 입력 배열 혹은 스칼라
    • src2 : 두 번째 입력 배열 혹은 스칼라
    • dst : 계산된 결과의 출력 배열
    • mask : 연산 마스크 : 0이 아닌 마스크 원소의 위치만 연산 수행(8비트 단일 채널)
    • dtype : 출력 배열의 깊이
  • cv2.subtract(src1, src2[, dst[, mask[, dtype]]]) : 두 개의 배열 혹은 배열과 스칼라의 각 원소 간 차분을 계산한다.
    • add() 함수와 인수 동일
  • cv2.multiply(src1, src2[, dst[, scale[, dtype]]]) : 두 배열의 각 원소 간 곱을 계산
    • scale : 두 배열의 원소 간 곱할 때 추가로 곱해주는 배율
  • cv2.divide(src1, src2[, dst[, scale[, dtype]]]) : 두 배열의 각 원소 간 나눗셈을 수행
  • cv2.divide(scale, src2[, dst[, dtype]]) : 스칼라값과 행렬 원소 간 나눗셈을 수행
  • cv2.addWeighted(src1, alpha, src2, beta, gamma[, dst[, dtype]]) : 두 배열의 각 원소에 가중치를 곱한 후에 가중된(weighted) 합을 계산
    • alpha : 첫 번째 배열의 모든 원소에 대한 가충치
    • beta : 두 번째 배열의 모든 원소에 대한 가충치
    • gamma : 두 배열의 원소 간 합에 추가로 더해주는 스칼라
import numpy as np, cv2
m1 = np.full((3, 6), 10, np.uint8)			# 단일 채널 생성 및 초기화
m2 = np.full((3, 6), 50, np.uint8)
m_mask = np.zeros(m1.shape, np.uint8)		# 마스크 생성
m_mask[ :, 3: ] = 1 
m_add1 = cv2.add(m1, m2)                    # 행렬 덧셈
m_add2 = cv2.add(m1, m2, mask=m_mask)       # 관심 영역만 덧셈 수행
# 행렬 나눗셈 수행
m_div1 = cv2.divide(m1, m2)
m1 = m1.astype(np.float32)                  # 형변환 - 소수 부분 보존
m2 = np.float32(m2)
m_div2 = cv2.divide(m1, m2)
titles = ['m1', 'm2', 'm_mask','m_add1','m_add2','m_div1', 'm_div2']
for title in titles:
    print("[%s] = \n%s \n" % (title, eval(title)))
[m1] = 
[[10. 10. 10. 10. 10. 10.]
 [10. 10. 10. 10. 10. 10.]
 [10. 10. 10. 10. 10. 10.]] 

[m2] = 
[[50. 50. 50. 50. 50. 50.]
 [50. 50. 50. 50. 50. 50.]
 [50. 50. 50. 50. 50. 50.]] 

[m_mask] = 
[[0 0 0 1 1 1]
 [0 0 0 1 1 1]
 [0 0 0 1 1 1]] 

[m_add1] = 
[[60 60 60 60 60 60]
 [60 60 60 60 60 60]
 [60 60 60 60 60 60]] 

[m_add2] = 
[[ 0  0  0 60 60 60]
 [ 0  0  0 60 60 60]
 [ 0  0  0 60 60 60]] 

[m_div1] = 
[[0 0 0 0 0 0]
 [0 0 0 0 0 0]
 [0 0 0 0 0 0]] 

[m_div2] = 
[[0.2 0.2 0.2 0.2 0.2 0.2]
 [0.2 0.2 0.2 0.2 0.2 0.2]
 [0.2 0.2 0.2 0.2 0.2 0.2]]