728x90
영상은 일종의 2차원 행렬이기 때문에 행렬의 산술 연산을 그대로 적용할 수 있다
dst(x, y) = saturate(src1(x, y) + src2(x, y))
OpenCV에서는 add() 함수를 사용해 영상의 덧셈을 수행할 수 있다
void add(InputArray src1, InputArray src2, OutputArray dst, InputArray mask = noArray(), int dtype = -1);
//src1 -> 첫 번째 입력 행렬 또는 스칼라
//src2 -> 두 번째 입력 행렬 또는 스칼라
//dst -> 입력 행렬과 같은 크기, 같은 채널 수를 갖는 출력 행렬
//mask -> 8비트 1채널 마스크 영상
//dtype -> 출력 행렬의 깊이, 깊이가 같은 경우에는 -1을 지정할 수 있다
add(src1, src2, dst);
dst = src1 + src2;
두 영상을 더할 때 각 영상에 가중치를 부여하여 덧셈 연산을 할 수도 있다
dst(x, y) = saturate(src1(x, y)*alpha + src2(x, y)*beta + gamma)
OpenCV에서 두 영상의 가중치 합을 구하려면 addWeighted() 함수를 사용한다
void addWeighted(InputArray src1, double alpha, InputArray src2, double beta, double gamma, OutputArray dst, int dtype = -1);
//src1 -> 첫 번째 입력 행렬
//alpha -> src1 행렬의 가중치
//src2 -> 두 번째 입력 행렬
//beta -> src2 행렬의 가중치
//gamma -> 가중합 결과에 추가적으로 더할 값
//dst -> 입력 행렬과 같은 크기, 같은 채널 수를 갖는 출력 행렬
//dtype -> 출력 행렬의 깊이, 깊이가 같은 경우에는 -1을 지정할 수 있다
addWeighted(src1, 0.5, src2, 0.5, 0, dst);
덧셈과 마찬가지로 두개의 영상에 대해 뺄셈 연산도 수행할 수 있다
dst(x, y) = saturate(src1(x, y) - src2(x, y))
void subtract(InputArray src1, InputArray src2, OutputArray dst, InputArray mask = noArray(), int dtype = -1);
//src1 -> 첫 번째 입력 행렬 또는 스칼라
//src2 -> 두 번째 입력 행렬 또는 스칼라
//dst -> 입력 행렬과 같은 크기, 같은 채널 수를 갖는 출력 행렬
//mask -> 8비트 1채널 마스크 영상
//dtype -> 출력 행렬의 깊이, 깊이가 같은 경우에는 -1을 지정할 수 있다
subtract(src1, src2, dst);
dst = src1 - src2;
영상을 빼는 순서에 따라 결과에 차이가 있는 것을 확인 할 수 있다
두 영상의 뺄셈 순서에 상관 없이 픽셀 값 차이가 큰 영역을 두드러지게 나타내고 싶으면 차이 연산을 수행할 수 있다
dst(x, y) = | src1(x, y) = src2(x, y) |
나머지 함수는 예제를 통해 알아보겠다
{
Mat src1 = imread("lenna256.bmp", IMREAD_GRAYSCALE);
Mat src2 = imread("square.bmp", IMREAD_GRAYSCALE);
if (src1.empty() || src2.empty()) {
cerr << "Image load failed!" << endl;
return -1;
}
imshow("src1", src1);
imshow("src2", src2);
Mat dst1, dst2, dst3, dst4;
add(src1, src2, dst1); //덧셈
addWeighted(src1, 0.5, src2, 0.5, 0, dst2); //가중치 합
subtract(src1, src2, dst3); //뺄셈
absdiff(src1, src2, dst4); //차이 연산
imshow("dst1", dst1);
imshow("dst2", dst2);
imshow("dst3", dst3);
imshow("dst4", dst4);
waitKey();
return 0;
}
728x90
'런닝머신 (ML)' 카테고리의 다른 글
[컴퓨터 비전 & 머신러닝] 영상의 필터링 (0) | 2023.04.20 |
---|---|
[컴퓨터 비전 & 머신러닝] 영상의 논리 연산 (0) | 2023.04.18 |
[컴퓨터 비전 & 머신러닝] 히스토그램 분석 (1) | 2023.04.17 |
[컴퓨터 비전 & 머신러닝] 영상의 명암비 조절 (0) | 2023.04.11 |
[컴퓨터 비전 & 머신러닝] 영상의 밝기 조절 (0) | 2023.04.06 |