- 영상은 2차원 행렬이므로 산술 연산 적용 가능.
- 두 개의 영상 더하기
- src1, src2는 입력 영상, dst는 덧셈 연산의 결과 영상
- 이 때 포화연산도 당연히 함께 수행하여야 함.(255가 최댓값)
// add() 함수
void add(InputArray src1, InputArray src2, OutputArray dst,
InputArray mask = noArray(), int dtype = -1);
- src1과 src2 행렬 깊이가 다르다면 dtype 인자를 지정해야 함. 같다면 기본값이 있으니 변경할 필요 x -> 두 영상의 타입이 서로 같을 경우 지정하지 않아도 된다는 뜻.
- 두 입력 영상 타입이 같을 경우 add() 함수를 대신하여 +연산자 재정의 사용 가능.
- 영상을 더할 때 가중치를 부여하여 덧셈 가능. 두 개의 행렬에 가중치를 부여하여 수식 표현할 경우의 연산
- 알파와 베타는 각 영상의 가중치를 의미하는 실수로 두 가중치의 합이 1이 되도록 설정해야 포화되는 픽셀이 발생하지 않음.
- 가중치가 높은 쪽의 영상 윤곽이 더 많이 나타남.
- 만약 두 가중치의 합이 1보다 클 경우 결과 영상이 두 입력 영상보다 밝아지고, 포화 현상이 발생할 수 있음. 반대의 경우 어두워짐.
// 두 영상의 가중치 합을 구하는 함수
void addWeighted(InputArray src1, double alpha, InputArray src2,
double beta, double gamma, OutputArray dst, int dtype = -1);
- gamma 인자를 통해 가중치의 합에 추가적인 덧셈을 한 번에 수행할 수 있음.
// subtract() 함수
void subtract(InputArray src1, InputArray src2, OutputArray dst,
InputArray mask=noArray(), int dtype=-1);
- 덧셈과 같은 원리로 - 연산자 재정의 사용 가능.
- 덧셈 연산과 다른 부분은 뺄셈의 대상이 되는 영상 순서에 따라 결과의 차이가 나타남.
// 차이 연산 함수
void absdiff(InputArray src1, InputArray src2, OutputArray dst);
- 뺄셈 연산의 경우 순서에 따라 결과의 차이가 발생하지만 absdiff() 함수를 이용한 차이 연산을 할 경우 순서에 상관없이 결과가 나타남.
- 픽셀 값 차이가 큰 영역을 위주로 나타내는 연산
- 뺄셈 연산 결과에 절댓값을 취하는 연산
- 차이 연산으로 나온 결과 영상은 차영상이라고 함.
// multiply() 함수
void multiply(InputArray src1, InputArray src2,
OutputArray dst, double scale = 1, int dtype = -1, int dtype = -1);
// divide() 함수
void divide(InputArray src1, InputArray src2, OutputArray dst,
double scale = 1, int dtype = -1);
- 영상의 같은 위치에 있는 픽셀 값끼리 서로 곱하거나 나누는 연산을 수행하는 함수
'Computer Vision' 카테고리의 다른 글
영상의 산술 및 논리 연산 - 2. 영상의 논리 연산 (0) | 2020.02.26 |
---|---|
영상의 밝기와 명암비 조절 - 3. 히스토그램 분석 (0) | 2020.02.21 |
영상의 밝기와 명암비 조절 - 2. 영상의 명암비 조절 (0) | 2020.02.18 |
영상의 밝기와 명암비 조절 - 1. 영상의 밝기 조절 (0) | 2020.02.15 |
OpenCV 주요 기능 - 5. 유용한 OpenCV 기능 (0) | 2020.02.14 |
댓글