源自OpenCV中的代码: int CvFMEstimator::run8Point( const CvMat* _m1, const CvMat* _m2, CvMat* _fmatrix ) { double a[9*9], w[9], v[9*9]; CvMat W = cvMat( 1, 9, CV_64F, w ); CvMat V = cvMat( 9, 9, CV_64F, v ); CvMat A = cvMat( 9, 9, CV_64F, a ); CvMat U, F0, TF; CvPoint2D64f m0c = {0,0}, m1c = {0,0}; double t, scale0 = 0, scale1 = 0; const CvPoint2D64f* m1 = (const CvPoint2D64f*)_m1->data.ptr; const CvPoint2D64f* m2 = (const CvPoint2D64f*)_m2->data.ptr; double* fmatrix = _fmatrix->data.db; int i, j, k, count = _m1->cols*_m1->rows; // compute centers and average distances for each of the two point sets for( i = 0; i < count; i++ ) { double x = m1[i].x, y = m1[i].y; m0c.x += x; m0c.y += y; x = m2[i].x, y = m2[i].y; m1c.x += x; m