是否有任何内置的方法在OpenCV中(C++ API)至减法两个矩阵逐行。减去矩阵行方向在OpenCV中
我有以下矩阵:
Mat A(10,2, CV_64F);
Mat B(1,2, CV_64F);
Mat C(10,2, CV_64F);
C = A - B;
// B is a 1 x 2 matrix, A is a 10 x 2 matrix, and C is a 10 x 2 matrix.
所述的每一行必须被选自B用C
是否有任何内置的方法在OpenCV中(C++ API)至减法两个矩阵逐行。减去矩阵行方向在OpenCV中
我有以下矩阵:
Mat A(10,2, CV_64F);
Mat B(1,2, CV_64F);
Mat C(10,2, CV_64F);
C = A - B;
// B is a 1 x 2 matrix, A is a 10 x 2 matrix, and C is a 10 x 2 matrix.
所述的每一行必须被选自B用C
我解决了它下面的方式减去存储为行:
Mat A(10,2, CV_64F);
Mat B(1,2, CV_64F);
Mat C(0,2, CV_64F);
Mat D(0,2, CV_64F);
for(int i=0;i<A.rows;i++)
{
C=(A.row(i)-B.row(0));
D.push_back(C.row(0));
}
cout<<"A\n"<<A<<endl;
cout<<"B\n"<<B<<endl;
cout<<"C\n"<<C<<endl;
cout<<"D\n"<<D<<endl;
根据OpenCV文档,可以使用方法subtract()。在你的情况下,它是
subtract(A.row(0), B.row(0), tempMat);
然后将tempMat推到C或CopyTo。
下面是引用: OpenCV Array Operation
使用cv::repeat()
http://docs.opencv.org/2.4/modules/core/doc/operations_on_arrays.html#repeat
cv::Mat A = cv::Mat::ones(10, 2, CV_64F) * 5.0;
cv::Mat B = cv::Mat::ones(1, 2, CV_64F) * 3.0;
cv::Mat BRepeat = cv::repeat(B, A.rows, 1);
cv::Mat C = A - BRepeat;
cout << endl;
cout << "A" << endl << A << endl << endl;
cout << "B" << endl << B << endl << endl;
cout << "BRepeat" << endl << BRepeat << endl << endl;
cout << "C" << endl << C << endl << endl;