失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > cv::fitLine用法

cv::fitLine用法

时间:2024-05-28 03:21:35

相关推荐

cv::fitLine用法

cv::fitLine用法

定义代码示例y = x + 1直线y = -x + 1直线

定义

在opencv官方文档定义如下:

void cv::fitLine(InputArray points,OutputArray line,int distType,double param,double reps,double aeps )#include <opencv2/imgproc.hpp>Fits a line to a 2D or 3D point set.ParameterspointsInput vector of 2D or 3D points, stored in std::vector<> or Mat.lineOutput 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.distTypeDistance used by the M-estimator, see DistanceTypesparamNumerical parameter ( C ) for some types of distances. If it is 0, an optimal value is chosen.repsSufficient accuracy for the radius (distance between the coordinate origin and the line).aepsSufficient accuracy for the angle. 0.01 would be a good default value for reps and aeps.

代码示例

简而言之,就是利用已有的点拟合直线,本篇只针对使用做简单示例,基于opencv3.4.5, C++;

主要介绍输出参数,

OutputArray line:在二维下为四个元素,前两个为向量(x, y),后两个为拟合直线上的一个点distType,参考如下:

//! @see distanceTransform, fitLineenum DistanceTypes {DIST_USER = -1, //!< User defined distanceDIST_L1= 1, //!< distance = |x1-x2| + |y1-y2|DIST_L2= 2, //!< the simple euclidean distanceDIST_C = 3, //!< distance = max(|x1-x2|,|y1-y2|)DIST_L12= 4, //!< L1-L2 metric: distance = 2(sqrt(1+x*x/2) - 1))DIST_FAIR = 5, //!< distance = c^2(|x|/c-log(1+|x|/c)), c = 1.3998DIST_WELSCH = 6, //!< distance = c^2/2(1-exp(-(x/c)^2)), c = 2.9846DIST_HUBER = 7 //!< distance = |x|<c ? x^2/2 : c(|x|-c/2), c=1.345};

param: 默认0,opencv自动优化reps:0.01精度即可aeps:建议0.01,0.01 would be a good default value…

y = x + 1直线

向量(0.707107,0.707107)如图下

设直线为 y = ax + b, a = 1 , b = 1

则 y = x + 1,部分代码:

std::vector<cv::Point2f> input_pts;input_pts.emplace_back(1, 2);input_pts.emplace_back(2, 3);cv::Vec4f calc_line;cv::fitLine(input_pts, calc_line, cv::DIST_L2, 0, 0.01, 0.01);std::cout << "calc_line[0]=" << calc_line[0]<< "\ncalc_line[0]=" << calc_line[1]<< "\ncalc_line[0]=" << calc_line[2]<< "\ncalc_line[0]=" << calc_line[3] << std::endl;

控制台输出

calc_line[0]=0.707107calc_line[0]=0.707107calc_line[0]=1.5calc_line[0]=2.5

y = -x + 1直线

向量(0.707107,-0.707107)

设直线为 y = ax + b, a = -1 , b = 1

则 y = -x + 1,部分代码:

std::vector<cv::Point2f> input_pts;input_pts.emplace_back(1, 2);input_pts.emplace_back(2, 1);cv::Vec4f calc_line;cv::fitLine(input_pts, calc_line, cv::DIST_L2, 0, 0.01, 0.01);std::cout << "calc_line[0]=" << calc_line[0]<< "\ncalc_line[0]=" << calc_line[1]<< "\ncalc_line[0]=" << calc_line[2]<< "\ncalc_line[0]=" << calc_line[3] << std::endl;

calc_line[0]=0.707107calc_line[0]=-0.707107calc_line[0]=1.5calc_line[0]=1.5

Enjoy~

如果觉得《cv::fitLine用法》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。
相关阅读
直线拟合fitLine函数的用法

直线拟合fitLine函数的用法

2021-10-11

cv.waitKey()用法

cv.waitKey()用法

2023-06-30

模块cv2的用法

模块cv2的用法

2019-12-24

OpenCV中cv2的用法

OpenCV中cv2的用法

2021-04-13