一、FitLine()函数原型

CV_EXPORTS_W void fitLine( InputArray points,    // 待输入点集(一般为二维数组或vector点集)OutputArray line,     // 输出点集(一个是方向向量,另一个是拟合直线上的点)(Vec4f(2d)或Vec6f(3d)的vector)int distType,         // 距离类型double param,         // 距离参数double reps,       // 径向的精度参数double aeps );       // 角度精度参数 

第一个参数是用于拟合直线的输入点集,可以是二维点的cv::Mat数组,也可以是二维点的STL vector。

第二个参数是输出的直线,对于二维直线而言类型为cv::Vec4f,对于三维直线类型则是cv::Vec6f,输出参数的前半部分给出的是直线的方向,而后半部分给出的是直线上的一点(即通常所说的点斜式直线)。

第三个参数是距离类型,拟合直线时,要使输入点到拟合直线的距离和最小化(即下面公式中的cost最小化),可供选的距离类型如下表所示,ri表示的是输入的点到直线的距离。

CV_DIST_USER =-1, /* User defined distance */
CV_DIST_L1 =1, /* distance = |x1-x2| + |y1-y2| */
CV_DIST_L2 =2, /* the simple euclidean distance */
CV_DIST_C =3, /* distance = max(|x1-x2|,|y1-y2|) */
CV_DIST_L12 =4, /* L1-L2 metric: distance = 2(sqrt(1+x*x/2) - 1)) */
CV_DIST_FAIR =5, /* distance = c^2(|x|/c-log(1+|x|/c)), c = 1.3998 */
CV_DIST_WELSCH =6, /* distance = c^2/2(1-exp(-(x/c)^2)), c = 2.9846 */
CV_DIST_HUBER =7 /* distance = |x|<c ? x^2/2 : c(|x|-c/2), c=1.345 */

第四个参数是距离参数,跟所选的距离类型有关,值可以设置为0,cv::fitLine()函数本身会自动选择最优化的值

第五、六两个参数用于表示拟合直线所需要的径向和角度精度,通常情况下两个值均被设定为1e-2。

下面,从一个具体的例子来看cv::Line()实际拟合的效果。

#include <opencv2/opencv.cpp>
#include <vector>
#include <iostream>using namespace std;
using namespace cv;int main()
{//创建一个用于绘制图像的空白图cv::Mat image = cv::Mat::zeros(480, 640, CV_8UC3);//输入拟合点std::vector<cv::Point> points;points.push_back(cv::Point(48, 58));points.push_back(cv::Point(105, 98));points.push_back(cv::Point(155, 160));points.push_back(cv::Point(212, 220));points.push_back(cv::Point(248, 260));points.push_back(cv::Point(320, 300));points.push_back(cv::Point(350, 360));points.push_back(cv::Point(412, 400));//将拟合点绘制到空白图上for (int i = 0; i < points.size(); i++){cv::circle(image, points[i], 5, cv::Scalar(0, 0, 255), 2, 8, 0);}cv::Vec4f line_para; cv::fitLine(points, line_para, cv::DIST_L2, 0, 1e-2, 1e-2);std::cout << "line_para = " << line_para << std::endl;//获取点斜式的点和斜率cv::Point point0;point0.x = line_para[2];point0.y = line_para[3];double k = line_para[1] / line_para[0];//计算直线的端点(y = k(x - x0) + y0)cv::Point point1, point2;point1.x = 0;point1.y = k * (0 - point0.x) + point0.y;point2.x = 640;point2.y = k * (640 - point0.x) + point0.y;cv::line(image, point1, point2, cv::Scalar(0, 255, 0), 2, 8, 0);cv::imshow("image", image);cv::waitKey(0);return 0;
}

参考链接:(1)https://blog.csdn.net/guduruyu/article/details/69505487

     (2)https://blog.csdn.net/qq_29540745/article/details/72779847

【OpenCV3】直线拟合--FitLine()函数详解相关推荐

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

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

  2. OpenCV | 直线拟合fitline函数

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

  3. python直线拟合_RANSAC算法详解(附Python拟合直线模型代码)

    之前只是简单了解RANSAC模型,知道它是干什么的.然后今天有个课程设计的报告,上去讲了一下RANSAC,感觉这个东西也没那么复杂,所以今天就总结一些RASAC并用Python实现一下直线拟合. RA ...

  4. 直线拟合fitLine函数的用法

    在霍夫检测直线的时候,一条直线会被检测出许多条,可以根据给定的点集拟合出一条直线的情形. void cv::fitLine(cv::InputArray points, // 二维点的数组或vecto ...

  5. python二元多次函数拟合_对python实现二维函数高次拟合的示例详解

    在参加"数据挖掘"比赛中遇到了关于函数高次拟合的问题,然后就整理了一下源码,以便后期的学习与改进. 在本次"数据挖掘"比赛中感觉收获最大的还是对于神经网络的认识 ...

  6. python中plt定义,对Python中plt的画图函数详解

    1.plt.legend plt.legend(loc=0)#显示图例的位置,自适应方式 说明: 'best' : 0, (only implemented for axes legends)(自适应 ...

  7. C语言网络编程:accept函数详解

    文章目录 前言 函数描述 代码实例 如何得到客户端的IP 和 端口号 前言 当使用tcp服务器使用socket创建通信文件描述符,bind绑定了文件描述符,服务器ip和端口号,listen将服务器端的 ...

  8. 【FFmpeg】函数详解(三)

    FFmpeg函数详解 14.av_write_frame 15.av_interleaved_write_frame 16.av_write_trailer 17.avio_close 18.av_i ...

  9. 【FFmpeg】函数详解(二)

    FFmpeg函数详解 9.av_dump_format 10.avio_open 11.avformat_write_header 12.avcodec_send_frame 13.avcodec_r ...

最新文章

  1. 使用XML与远程服务器进行交互
  2. Cisco Easy ***综合配置示例
  3. [Python图像识别] 四十九.图像生成之什么是生成对抗网络GAN?基础原理和代码普及
  4. 从一个字符串中剔除连续的字符,只留一个。
  5. phpstorm破解安装
  6. dockerfile mysql例子_docker-compose 实用示例
  7. java afconsole_Java ——基础语法
  8. 手把手教你获取、编译和调试Flink的源代码
  9. 2、数的分解 - 2019年第十届蓝桥杯大赛软件类省赛
  10. 《重大技术需求征集系统》项目目标文档
  11. LAMP使开放源代码软件安全性提高
  12. MSNMessenger忌讳用法大全(转)
  13. 攻防世界misc高手进阶区funny_video完整版答案
  14. 屏幕录制 gif android,分享 Android 手机屏幕录制并制玉成 GIF 演示图片
  15. 中国近代史纲要考研选择题
  16. 2021-09-06 网安实验-编码解码-凯撒密码,QWERTY键盘编码
  17. Windows手动配置ip
  18. AP 1532E register Cisco 2504 AP注册WLC
  19. 如何最小编译你的软件
  20. [C/C++语言基础] —函数

热门文章

  1. 系统集成项目管理工程师(中级)
  2. 纺织ERP_面料ERP_指点ERP系统
  3. 不惧年龄,无限可能,32岁也能成功转行IT行业
  4. HTML5网页设计成品_中华传统文化网页题材_诗词网页4页_web课程设计网页制作
  5. DPDKVPP关键技术文档总结
  6. 面向过程与面向对象有什么区别
  7. leaflet 画扇形
  8. 3DLC系列:A/B 网格应用实践
  9. 电脑如何登录两个微信
  10. JAVA 支付宝支付_史诗级简单教程(SpringBoot)