opencv提供了fitline函数用于直线拟合,原型为:
C++: void fitLine(InputArray points, OutputArray line, int distType, double param, double reps, double aeps) Python: cv2.fitLine(points, distType, param, reps, aeps) → line C: void cvFitLine(const CvArr* points, int distType, double param, double reps, double aeps, float* line) Python: cv.FitLine(points, distType, param, reps, aeps) → line Parameters: points – Input vector of 2D or 3D points, stored in std::vector<> or Mat. line – Output line parameters. In case of 2D fitting, it should be a vector of 4 elements (like Vec4f) - (vx, vy, x0, y0), where (vx, vy) is a normalized vector collinear to the line and (x0, y0) is a point on the line. In case of 3D fitting, it should be a vector of 6 elements (like Vec6f) - (vx, vy, vz, x0, y0, z0), where (vx, vy, vz) is a normalized vector collinear to the line and (x0, y0, z0) is a point on the line. distType – Distance used by the M-estimator (see the discussion below). param – Numerical parameter ( C ) for some types of distances. If it is 0, an optimal value is chosen. reps – Sufficient accuracy for the radius (distance between the coordinate origin and the line). aeps – Sufficient accuracy for the angle. 0.01 would be a good default value for reps and aeps.
支持2D,3D的点集拟合,点集使用std::vector<>来存储,如果为3Dpoint,那么line使用Vec6f, 2D points,使用Vec4f;
拟合方式提供了下面几种方法:
-
distType=CV_DIST_L2 最小二乘法
-
distType=CV_DIST_L1
-
distType=CV_DIST_L12
-
distType=CV_DIST_FAIR
-
distType=CV_DIST_WELSCH
-
distType=CV_DIST_HUBER
注: 该博文为扩展型;