2012-03-14 4 views
1

에서이 모든 내장 방법을 OpenCV에 (C++ API)이 빼기 에 대한 행렬 행 방향입니다.빼기 행렬의 행 방향 OpenCV의

I는 다음의 행렬을 가지고

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. 

A의 각 행 I는 그것을 다음과 같이 해결

답변

0

C으로 일렬로 B로부터 감산되고 저장되어야 :

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; 
0

OpenCV 문서에 따르면 subtract() 메서드를 사용할 수 있습니다. 귀하의 경우에는

subtract(A.row(0), B.row(0), tempMat); 

입니다. 그런 다음 tempMat를 C 또는 CopyTo로 밀어 넣으십시오. OpenCV Array Operation

0

사용 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; 
: 여기

은 기준입니다