当前位置:   article > 正文

OpenCV | 直线拟合fitline函数_opencv fitline

opencv fitline

        

学习目标:

学习掌握OpenCV的fitline函数


学习内容:

cv::fitLine()的具体调用形式如下:

  1. void cv::fitLine(
  2. cv::InputArray points, // 待拟合的直线的集合,必须是矩阵形式;
  3. cv::OutputArray line, // 距离类型。fitline为距离最小化函数,拟合直线时,要使输入点到拟合直线的距离和最小化。
  4. int distType, // 距离类型
  5. double param, // 距离参数,跟所选的距离类型有关,值可以设置为0
  6. double reps, // 径向的精度参数 表示直线到原点距离的精度,建议取 0.01。设为0,则自动选用最优值
  7. double aeps // 角度精度参数 表示直线角度的精度,建议取 0.01
  8. );

距离类型有以下的类别:

cv2.DIST_USER : User defined distance
cv2.DIST_L1: distance = |x1-x2| + |y1-y2|
cv2.DIST_L2: 欧式距离,此时与最小二乘法相同
cv2.DIST_C:distance = max(|x1-x2|,|y1-y2|)
cv2.DIST_L12:L1-L2 metric: distance = 2(sqrt(1+x*x/2) - 1))
cv2.DIST_FAIR:distance = c^2(|x|/c-log(1+|x|/c)), c = 1.3998
cv2.DIST_WELSCH: distance = c2/2(1-exp(-(x/c)2)), c = 2.9846
cv2.DIST_HUBER:distance = |x|<c ? x^2/2 : c(|x|-c/2), c=1.345


代码实现:

  1. def fit(x,y,length):
  2. points = []
  3. for i in range(length):
  4. points.append([x[i], y[i]])
  5. points = np.array(points)
  6. output = cv.fitLine(points, cv.DIST_L2, 0, 0.01, 0.01)
  7. #output[0],output[1]是一个方向向量,output[2],output[3]是直线上一个点
  8. k = output[1] / output[0]
  9. b = output[3] - k * output[2]

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/653560
推荐阅读
相关标签
  

闽ICP备14008679号