1. 영상의 산술 연산
- 영상은 2차원 행렬이기 때문에 산술 연산을 그대로 적용 가능 -> 두개의 연산을 더하거나 빼는 연산을 통해 새로운 결과 영상 생성 가능! (But, 곱하거나 나누는 연산은 거의 사용 x)
① 덧셈 연산
dst(x,y) = src1(x,y) + src2(x,y) //덧셈 연산(두개의 입력 영상에서 같은 위치 픽셀 값을 서로 더하여 결과 영상 픽셀값으로 설정)
dst(x,y) = saturate(src1(x,y) + src2(x,y)) //그레이스케일 최댓값(255)로 설정하는 포화연산 수행
void add(InputArray src1, InputArray src2, OutputArray dst,
InputArray mask = noArray(), int dtype = -1);
//dtype = 출력 행렬의 깊이
//입력 = 두 개의 행렬 또는 영상
//출력 = 하나의 행렬 또는 영상
dst(x,y) = saturate(α*src1(x,y) + β*src2(x,y)) //가중치를 부여하여 덧셈 연산
- 덧셈 연산 결과 영상 두 입력 영상의 윤곽을 조금씩 포함, 전반적으로 밝게 포화되는 부분↑ => 가중치 부여 덧셈 연산사용!
dst(x,y) = saturate(α*src1(x,y) + β*src2(x,y)) //가중치를 부여하여 덧셈 연산
- addWeighted() = 두 영상의 가중치 합을 구하는 함수
void addWeighted(InputArray src1, double alpha, InputArray src2,
double beta, double gamma, OutputArray dst, int dtype = -1);
//gamma = 가중합 결과에 추가적으로 더할 값
② 뺄셈 연산
dst(x,y) = saturate(src1(x,y) - src2(x,y))
void subtract(InputArray src1, InputArray src2, OutputArray dst,
InputArray mask = noArray(), int dtype = -1);
//서로 타입이 다른 두 영상기리 뺄셈 연산을 수행하려면 반드시 subtract() 함수 사용, dtype 인자 명시
- 뺄셈 연산의 경우 연산 순서에 따라 결과가 다름 -> 순서 상관없이 픽셀 값 차이가 큰 영역을 두드러지게 나태내고 싶다면 => 차이 연산 수행!
- 차이 연산 = 뺄셈 연산 결과에 절댓값을 취하는 연산
- 차영상(difference imgae) = 차이 연산으로 구한 결과 영상
dst(x,y) = |src1(x,y) - src2(x,y)|
void absdiff(InputArray src1, InputArray src2, OutputArray dst);
③ 곱셈 & 나눗셈 연산
- 영상을 이용하여 행렬의 곱셈을 수행하는 경우는 거의 없음
- But, 두 영상에서 같은 위치에 있는 픽셀 값끼리 서로 곱하거나 나누는 연산 수행 가능
void multiply(InputArray src1, InputArray src2,
OutputArray dst, double scale = 1, int dtype = -1); //곱셈 연산
void divide(InputArray src1, InputArray src2,
OutputArray dst, double scale = 1, int dtype = -1); //나눗셈 연산
2. 영상의 논리 연산
- 영상의 논리 연산 = 픽셀 값을 이진수로 표현하여 각 비트 단위 논리 연산을 수행하는 것
- 논리곱(AND), 논리합(OR), 배타적 논리합(XOR), 부정(NOT) 연산 지원
입력 비트 | 논리 연산 결과 | ||||
a | b | a AND b | a OR b | a XOR b | NOT a |
0 | 0 | 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());
void bitwise_or(InputArray src1, InputArray src2, OutputArray dst,
InputArray mask = noArray());
void bitwise_xor(InputArray src1, InputArray src2, OutputArray dst,
InputArray mask = noArray());
void bitwise_not(InputArray src1, OutputArray dst,
InputArray mask = noArray());
'컴퓨터 비전' 카테고리의 다른 글
OpenCV 주요 기능 (0) | 2020.02.14 |
---|---|
OpenCV 주요 클래스 (0) | 2020.02.12 |
openCV를 사용한 영상의 밝기와 명암비 조절 (1) | 2020.02.09 |
댓글