相比于直线检测,直线拟合的最大特点是将所有数据只拟合出一条直线

void fitLine( InputArray points, OutputArray line, int distType,double param, double reps, double aeps );
  • points:输入待拟合直线的2D或者3D点集。
  • line:输出描述直线的参数,2D点集描述参数为Vec4f类型,3D点集描述参数为Vec6f类型。
  • distType:M-estimator算法使用的距离类型标志,可以选择的距离类型在表7-1中给出。
  • param:某些类型距离的数值参数(C)。如果数值为0,则自动选择最佳值。
  • reps:坐标原点与直线之间的距离精度,数值0表示选择自适应参数,一般常选择0.01。
  • aeps:直线角度精度,数值0表示选择自适应参数,一般常选择0.01。

该函数利用最小二乘法拟合出距离所有点距离最小的直线,直线的描述形式可以转化成点斜式。函数第一个参数是待拟合直线的2D或者3D点集,可以存放在vector<>或者Mat类型的变量中赋值给参数。函数第二个参数是拟合直线的描述参数,如果是2D点集,输出量为Vec4f类型的(vx vy x0 y0),其中(vx vy)是与直线共线的归一化向量,(x0 y0)是拟合直线上的随意一点,根据这四个量可以计算得到2维平面直线的点斜式解析式,表示形式如式所示。

如果输入参数是3D点集,输出量为Vec6f类型的(vx vy vz x0 y0 z0),其中(vx vy vz)是与直线共线的归一化向量,(x0 y0 z0)是拟合直线上的随意一点。函数第三个参数是M-estimator算法使用的距离类型标志,可以选择的距离类型在表中给出。函数第四个参数是某些距离类型中的数值参数C,如果数值0表示选择最佳值。函数第五个参数表示坐标原点与拟合直线之间的距离精度,数值0表示选择自适应参数;函数第六个参数表示拟合直线的角度精度,数值0表示选择自适应参数。第五个参数和第六个参数一般取值0.01。

简单示例

//
// Created by smallflyfly on 2021/6/22.
//#include "opencv2/opencv.hpp"
#include <iostream>using namespace std;
using namespace cv;int main() {Vec4f lines;vector<Point2f> points;const static float pts[20][2] = {{0.0f,0.0f},{10.0f,11.0f},{21.0f,20.0f},{30.0f,30.0f},{40.0f,42.0f},{50.0f,50.0f},{60.0f,60.0f},{70.0f,70.0f},{80.0f,80.0f},{90.0f,92.0f},{100.0f,100.0f},{110.0f,110.0f},{120.f,120.0f},{136.0f,130.0f},{138.0f,140.0f},{150.0f,150.0f},{160.0f,163.0f},{175.0f,170.0f},{181.0f,180.0f},{200.0f,190.0f}};for (int i = 0; i < 20; ++i) {points.emplace_back(pts[i][0], pts[i][1]);}double param = 0.0;double reps = 0.01;double aeps = 0.01;fitLine(points, lines, DIST_L1, param, reps, aeps);cout << lines << endl;return 0;
}

OpenCV——直线拟合相关推荐

  1. OpenCV直线拟合检测

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自:opencv学堂 OpenCV直线拟合检测 霍夫直线检测 ...

  2. OpenCV 直线拟合及应用

    直线拟合顾名思义就是根据多个有限个数的点确定一条直线.依据为: 其中为第i个点到直线的距离,p(d)则为确定最小值的函数.而不同的p(d)对应着不同的直线拟合方法: OpenCV提供了7种(-1为用户 ...

  3. [OpenCV]直线拟合

    OpenCV实现了直线的拟合. CV_IMPL void cvFitLine( const CvArr* array, int dist, double param,double reps, doub ...

  4. OpenCV | 直线拟合fitline函数(Python)

    简介 之前做直线拟合时,自己写了一个利用最小二乘做直线拟合的程序,但是由于直线检测的误差比较大,拟合的效果并不好.个人不知道是什么原因,因此想尝试更改一下直线拟合的算法,后来找到了OpenCV中的fi ...

  5. OpenCV—直线拟合fitLine

    本文的主要参考为官方文档OpenCV249-fitLine和博客-OpenCV 学习(直线拟合) 以及<Learning OpenCV 3>page425-426 OpenCV中提供的直线 ...

  6. opencv 直线拟合

    一.话说直线拟合 霍夫直线检测容易受到线段形状与噪声的干扰而失真,这个时候我们需要另辟蹊径,通过对图像进行二值分析,提取骨架,对骨架像素点拟合生成直线,这种做法在一些场景下非常有效,而且效果还比较好. ...

  7. OpenCV | 直线拟合fitline函数

    学习目标: 学习掌握OpenCV的fitline函数 学习内容: cv::fitLine()的具体调用形式如下: void cv::fitLine( cv::InputArray points, // ...

  8. opencv直线拟合cv::fitLine()

    通过2D或者2D点集拟合直线 void fitLine( InputArray points, OutputArray line, int distType,double param, double ...

  9. OpenCV fitline直线拟合函数学习

    下图是OpenCV官方文档中,对直线拟合函数的详细介绍: fitLine()函数用于,对二维或三维空间中的点集进行直线拟合.共有六个参数: param 1:输入的点集,可以是Mat或者vector&l ...

最新文章

  1. 用vs2017编写html,vs2017可以编写java
  2. PDF编辑处理的一条龙服务
  3. 【控制】《鲁棒控制-线性矩阵不等式处理方法》-俞立老师-第1章-引言
  4. 学生党如何拿到阿里技术offer:《阿里面试(成功)》
  5. 查看Centos7系统参数和机器参数
  6. ajax和Java session监听
  7. hive 行转列和列转行的方法_面试常考!SQL行转列和列转行
  8. php redis list 长度限制,(PHP)redis List(列表)操作
  9. 3GPP规范命名规则解读
  10. 设计模式之建造者(builder)模式
  11. 安卓导航车机root方法_不破不立,拥抱安卓的全新奥迪A4L到底有多好用?
  12. android手写输入法开发,基于Android平台的云计算手写输入法
  13. AcrelEMS-IDC综合能效管理系统在某数据中心的应用
  14. 基于layui 2.*省市级三级联动
  15. 1256 字符串复制
  16. Revit API 之 气泡
  17. 软件工程团队第一次作业
  18. TestEngine with ID ‘junit-vintage‘ failed to discover tests
  19. Thank You Microsoft丨一流的人才 一流的感恩!
  20. 自由浏览器 android,最大节省流量达85% 360安全浏览器V3.1版发布

热门文章

  1. deepfloyd/IF
  2. mongoDB centos安装与客户端
  3. EMUI10LIST
  4. 如何优雅的在业务中使用设计模式
  5. linux云服务器常用设置
  6. 统计学基础(一):中位数、方差、标准差、均方误差、估计量、高斯函数、正态分布...
  7. ​​【​观察】解读京东3C品牌升级背后 零售基础设施输出赋能更多行业
  8. 用户画像洞察分类模型 - 前端页面展示
  9. 达梦数据库中迁移过来的数据,在Mysql中批量添加注释,修改注释
  10. 为什么选择快速开发?浅谈快速开发的优势