영상의 연산
* 모든 연산은 자동으로 포화연산을 수행한다.
* 각 연산은 함수대신 연산자 재정의를 사용할 수 있지만 서로 다른 타입의 영상에 연산을 수행하려면 반드시 함수를 사용해야하고 dtype을 명시해야 한다.
* 영상의 덧셈
void add(InputArray src1, InputArray src2, OutputArray dst, InputArray mask = noArray(), int dtype = -1);
dst = src1 + src2;
src1 : 연산 대상이되는 입력 행렬 or 스칼라
src2 : 연산 대상이되는 입력 행렬 or 스칼라
dst : 연산결과를 저장할 입력 행렬과 같은 크기, 같은 채널 수를 갖는 출력 행렬. dst의 깊이는 src1, src2의 깊이와 같거나 또는 dtype에 의해 결정된다.
mask : 8비트 1채널 마스크 영상. mask 행렬 원소 값이 0이 아닌 위치에서만 연산을 수행한다.
dtype : 출력 행렬의 깊이. src1과 src2의 깊이가 같은 경우에는 dtype에 -1을 지정할 수 있고 이 경우 dst의 깊이는 src1, src2와 같은 깊이로 설정된다. src1과 src2의 깊이가 서로 다른 경우에느 dtype을 반드시 지정해야한다.
* 가중치를 부여한 덧셈
void addWeighted(InputArray src1, double alpha, InputArray src2, double beta, double gamma, OutputArray dst, int dtype = -1);
dst = src1*alpha + src2*beta + gamma;
alpha : src1 행렬의 가중치
beta : src2 행렬의 가중치
gamma : 가중한 결과에 추가적으로 더할 값
* 영상의 뺄셈
void subtract(InputArray src1, InputArray src2, OutputArray dst, InputArray mask = noArray(), int dtype = -1);
dst = src1 - src2
* 차영상 (차이연산, 뺄셈 연산 결과의 절대값)
void absdiff(InputArray src1, InputArray src2, OutputArray dst);
dst = | src1 - src2 |
* 영상의 곱셈
void multiply(InputArray src1, InputArray src2, OutputArray dst, double scale = 1, int dtype = -1);
dst = src1 * src2 * scale;
scale : 추가적으로 확대/축소할 비율
* 영상의 나눗셈
void divide(InputArray src1, InputArray src2, OutputArray dst, double scale = 1, int dtype = -1);
dst = src1 / src2 * scale;
* 영상의 논리 연산
입력비트 | 논리 연산 결 | ||||
a | b | a AND b | a OR b | a XOR b | NOT a |
0 | 1 | 0 | 0 | 0 | 1 |
0 | 1 | 0 | 1 | 1 | 1 |
1 | 0 | 0 | 1 | 1 | 0 |
1 | 1 | 1 | 1 | 0 | 0 |
void bitwise_and(InputArray src1, InputArray src2, OutputArray dst, InputArray mask = noArray());
dst = src1 & src2;
void bitwise_or(InputArray src1, InputArray src2, OutputArray dst, InputArray mask = noArray());
dst = src1 | src2;
void bitwise_xor(InputArray src1, InputArray src2, OutputArray dst, InputArray mask = noArray());
dst = src1 ^ src2;
void bitwise_not(InputArray src, OutputArray dst, InputArray mask = noArray());
dst = ~src;