(原)opencv直线拟合fitLine

转载请注明出处

http://www.cnblogs.com/darkknightzh/p/5486234.html

参考网址:

http://blog.csdn.net/thefutureisour/article/details/7599537

 1 Mat img(60, 60, CV_8UC1, Scalar(0));
 2     std::vector<Point2f> points;
 3     points.push_back(Point2f(10.5, 10.2));
 4     points.push_back(Point2f(20.6, 20.7));
 5     points.push_back(Point2f(33.5, 30.2));
 6     points.push_back(Point2f(40.7, 50));
 7
 8     //储存拟合直线的容器
 9     Vec4f line;
10     //直线拟合函数
11     fitLine(Mat(points), line, CV_DIST_L1, 0, 0.01, 0.01);
12     std::cout << "line: (" << line[0] << "," << line[1] << ")(" << line[2] << "," << line[3] << ")\n";
13
14     for (auto i = 0; i < points.size(); i++)
15         cv::circle(img, cvPoint(points.at(i).x, points.at(i).y), 2, Scalar(255));
16
17     double k = line[1] / line[0];
18     double step = 40;
19     cv::line(img, cvPoint(line[2] - step, line[3] - k*step), cvPoint(line[2] + step, k*step + line[3]), Scalar(255));
20
21     imshow("img", img);
22     waitKey(0);

拟合的结果Vec4f类型的line中的前两个值 给出的是直线的方向的单位向量,后两个值给出的是该直线通过的一个点(转自参考网址)。

时间: 2024-08-01 10:20:22

(原)opencv直线拟合fitLine的相关文章

opencv直线拟合cv::fitLine()

通过2D或者2D点集拟合直线 void fitLine( InputArray points, OutputArray line, int distType,double param, double reps, double aeps ); @param points Input vector of 2D or 3D points, stored in std::vector\<\> or Mat.@param line Output line parameters. In case of 2

OpenCV fitline直线拟合函数学习

下图是OpenCV官方文档中,对直线拟合函数的详细介绍: fitLine()函数用于,对二维或三维空间中的点集进行直线拟合.共有六个参数: param 1:输入的点集,可以是Mat或者vector<>,可以是二维点集或三维点集. 例如: vector<Point> points; param 2:拟合结果,即一条直线.在二维空间中,直线可以定义为 Vec4f line; 在二维平面中,(line[0],line[1])表示直线的方向向量,(line[2],line[3])表示直线上

OpenCV 学习(直线拟合)

OpenCV 学习(直线拟合) Hough 变换可以提取图像中的直线.但是提取的直线的精度不高.而很多场合下,我们需要精确的估计直线的参数,这时就需要进行直线拟合. 直线拟合的方法很多,比如一元线性回归就是一种最简单的直线拟合方法.但是这种方法不适合用于提取图像中的直线.因为这种算法假设每个数据点的X 坐标是准确的,Y 坐标是带有高斯噪声的.可实际上,图像中的每个数据点的XY 坐标都是带有噪声的. 下面就来讲讲适用于提取图像中直线的直线拟合算法. 一个点 (xi,yi) 到直线的距离用 ri 来

基于EM的多直线拟合实现及思考

作者:桂. 时间:2017-03-22  06:13:50 链接:http://www.cnblogs.com/xingshansi/p/6597796.html 声明:欢迎被转载,不过记得注明出处哦~ 前言 分布拟合与曲线拟合系列本想简单梳理,却啰嗦的没完没了.本文主要介绍:多直线的拟合,多曲线可以依次类推.全文主要包括: 1)背景介绍 2)理论推导 3)代码实现 4)关于拟合的思考 内容多有借鉴他人,最后一并附上链接. 一.背景介绍 对于单个直线,可以借助MLE或者最小二乘进行求参,对于多条

直线拟合算法(续)

直线拟合算法(续) 曾经写过一篇博客.介绍直线拟合算法. http://blog.csdn.net/liyuanbhu/article/details/50866802 给出的代码事实上有一点小问题,就是 den = 0 时会出现除以 0 的错误. 今天正好也有网友问起这个问题. 我就再写一篇短文来说说怎样解决问题. 首先我们知道: den=D2xy+(λ?Dxx)2??????????????√ 那么 den=0 意味着: Dxy=0λ=Dxx 我们还有关于 λ 的计算式: λ=Dxx+Dyy

直线拟合算法

在计算机视觉的应用中,经常会用到提取一条直线的精确位置这样的工作.这时就要用到直线的拟合算法了. 这里,我也贴一个利用最小二乘法计算最佳拟合直线的代码. 这个代码是我以前学习<机器视觉算法与应用(双语版)>[德] 斯蒂格(Steger C) 著:杨少荣 等 译 的书时写的.所有的公式推导都在书中 3.8.1 ,还算比较有用. 与一元线性回归算法的区别:一元线性回归算法假定 X 是无误差的,只有 Y 有误差. 而这个算法假设每个点的 X Y 坐标的误差都是符合 0 均值的正态分布的. 因此,在计

最小二乘法直线拟合

最小二乘法的直线拟合 #coding:utf-8 import numpy as np import matplotlib.pyplot as plt dots = np.array([[1,6], [2,5], [3,7], [4,10]]) plt.plot([i[0] for i in dots],      [i[1] for i in dots], 'ro') plt.axis([0, 6, 0, 12]) def nihezhixian(k, x, b):     return k*

ax+by+c=0 型直线拟合算法

所谓直线拟合,通常也叫做线性拟合.一元线性回归.指的是当我们有一批数据(xi,yi),这些数据在平面坐标系下落在一条直线上,或近似的落在一条直线上.我们就要求出这条直线的参数.如果这条直线可以写为: y=kx+b 那么 k=∑(xi?xˉ)(yi?yˉ)∑(xi?xˉ)2 b=yˉ?kxˉ 这个关系式许多教科书上都有详细的推导,无需多说. 今天要说的是另一种情况,当我们的数据有可能落在一条竖直的直线上,也就是k 有可能为∞ 时,应该如何做拟合.这时我们肯定就不能用y=kx+b 了,但是可以将这个

Matlab实现线性回归(直线拟合)

线性拟合:对于y=a*x+b的形式 a=(N*ΣXi*Yi-ΣXi*ΣYi)/(N*ΣXi*Xi-(ΣXi)2) b=((ΣXi*Xi)*(ΣYi)-(ΣXi)*(ΣXi*Yi))/(N*ΣXi*Xi-(ΣXi)2) 利用Matlab自带函数可实现: 拟合函数:pn=polyfit(x,y,n)  返回pn系数向量,降阶排列,n为阶数 函数:yy=polyval(pn,x) pn为降阶排列的多项式系数,x为向量或者矩阵,返回yy:将x带入pn后计算得到的向量或者矩阵. %初始数据 x=[1 2