안녕하세요 이번 글에서는 영상에서의 산술 연산 곱셈 나눗셈에 대해 알아보겠습니다.
이전 글에서도 설명했지만 곱셈, 나눗셈은 잘 사용되지 않습니다.
곱셈
OpenCV에서는 곱셈 연산을 할 경우 multiply 함수를 사용합니다.
/**
@param src1 입력 영상1
@param src2 입력 영상2
@param dst 입력 영상 1, 2에 대한 출력 결과
@param scale 확대, 축소 비율 추가 옵션
@param dtype 출력 행렬의 깊이
*/
void multiply(InputArray src1, InputArray src2, OutputArray dst, double scale = 1, int dtype = -1);
샘플 코드는 아래와 같습니다.
unsigned char data1[] ={1, 3, 5, 7, 9, 11, 13, 15, 17};
unsigned char data2[] ={2, 4, 6, 8, 10, 12, 14, 16, 18};
Mat src1 = Mat(3, 3, CV_8UC1, data1);
Mat src2 = Mat(3, 3, CV_8UC1, data2);
Mat dst1;
multiply(src1, src2, dst1);
cout << "========= src1 =========" << endl;
cout << src1 << endl << endl;
cout << "========= src2 =========" << endl;
cout << src2 << endl << endl;
cout << "========= dst1 =========" << endl;
cout << dst1 << endl << endl;
실행 결과는 아래와 같습니다.
src1과 src2가 곱해져서 dst1에 입력되어 있는 것을 볼 수있습니다.
나눗셈
나눗셈에 대해 알아보겠습니다. 나눗셈은 divide 함수를 사용합니다.
/**
@param src1 입력 영상 1
@param src2 second입력 영상 2
@param scale 확대 축소 비율, 추가 옵션
@param dst 출력 영상
@param dtype 출력 행렬의 깊이
*/
void divide(InputArray src1, InputArray src2, OutputArray dst, double scale = 1, int dtype = -1);
샘플 코드는 아래와 같습니다.
float data1[] ={1., 3., 5., 7., 9., 11., 13., 15., 17.};
float data2[] ={2., 4., 6., 8., 10., 12., 14., 16., 18.};
Mat src1 = Mat(3, 3, CV_32FC1, data1);
Mat src2 = Mat(3, 3, CV_32FC1, data2);
Mat dst1;
divide(src1, src2, dst1);
cout << "========= src1 =========" << endl;
cout << src1 << endl << endl;
cout << "========= src2 =========" << endl;
cout << src2 << endl << endl;
cout << "========= dst1 =========" << endl;
cout << dst1 << endl << endl;
실행 결과는 아래와 같습니다.
역시나 dst1에 나눗셈이 된 것을 볼 수있습니다.
이상으로 곱셈, 나눗셈에 대해 알아보았습니다.