返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >OpenCV实现直线拟合
  • 887
分享到

OpenCV实现直线拟合

2024-04-02 19:04:59 887人浏览 八月长安
摘要

相比于直线检测,直线拟合的最大特点是将所有数据只拟合出一条直线 void fitLine( InputArray points, OutputArray line, int d

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


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;
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: OpenCV实现直线拟合

本文链接: https://lsjlt.com/news/128871.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • OpenCV实现直线拟合
    相比于直线检测,直线拟合的最大特点是将所有数据只拟合出一条直线 void fitLine( InputArray points, OutputArray line, int d...
    99+
    2024-04-02
  • OpenCV实现直线检测
    本文实例为大家分享了OpenCV实现直线检测的具体代码,供大家参考,具体内容如下 1 介绍 本文主要介绍OpenCV自带的直线检测函数HoughLines()的用法,这个函数的第一个...
    99+
    2024-04-02
  • OpenCV实现直线检测并消除
    本文实例为大家分享了OpenCV实现直线检测并消除的具体代码,供大家参考,具体内容如下 很简单,代码如下 #include<iostream> #include<...
    99+
    2024-04-02
  • OpenCV-Python实现轮廓拟合
    目录前言绘制椭圆的矩形边界最小包围矩形框最小包围圆形框最优拟合椭圆最优拟合直线最小外包三角形逼近多边形前言 什么是轮廓? 轮廓可以简单认为成将连续的点(连着边界)连在一起的曲线,具有...
    99+
    2024-04-02
  • OpenCV实现霍夫变换直线检测
    霍夫变换(Hough Transform)是图像处理中检测是否存在直线的重要算法,该算法是由Paul Hough在1962年首次提出,最开始只能检测图像中的直线,但是霍夫变换经过不断...
    99+
    2024-04-02
  • python opencv检测直线 cv2.HoughLinesP的实现
    cv2.HoughLines()函数是在二值图像中查找直线,cv2.HoughLinesP()函数可以查找直线段。 cv2.HoughLinesP()函数原型: HoughLin...
    99+
    2024-04-02
  • Android基于OpenCV实现霍夫直线检测
    目录霍夫直线检测点和线的对偶性极坐标参数方程API操作效果霍夫直线检测 点和线的对偶性 图像空间中的点,对应霍夫空间中的直线 图像空间中的直线,对应霍夫空间中的...
    99+
    2024-04-02
  • OpenCV-Python如何实现轮廓拟合
    这篇文章主要介绍OpenCV-Python如何实现轮廓拟合,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!前言什么是轮廓?轮廓可以简单认为成将连续的点(连着边界)连在一起的曲线,具有相同 的颜色或者灰度。轮廓在形状分析...
    99+
    2023-06-15
  • Python OpenCV Hough直线检测算法如何实现
    这篇文章主要介绍了Python OpenCV Hough直线检测算法如何实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python OpenCV Hough直线检测算...
    99+
    2023-07-02
  • C#最小二乘法拟合曲线成直线的实例
    目录最小二乘法拟合曲线成直线效果总结最小二乘法拟合曲线成直线 效果 拟合前 拟合后 传入X轴和Y轴的数据,得到新的Y轴数据。 将X值数据和拟合后的Y轴数据绑带即可。 /// ...
    99+
    2023-02-26
    C#最小二乘法 C#拟合曲线 C#直线
  • python+pygame+opencv+gpt实现虚拟数字人直播(一)
    AI技术突飞猛进,不断的改变着人们的工作和生活。数字人直播作为新兴形式,必将成为未来趋势,具有巨大的、广阔的、惊人的市场前景。它将不断融合创新技术和跨界合作,提供更具个性化和多样化的互动体验,成为未来的一种趋势。 前言 马斯克称:“人...
    99+
    2023-10-09
    python 开发语言 虚拟数字人 opencv
  • Opencv实现计算两条直线或线段角度方法详解
    目录方法一方法二方法三方法一 通过斜率关系计算,公式如下图: 需注意在求斜率时不要出现竖直情况,python计算会报错,但按理说应该可以计算出无穷的,此处先放这吧,等后期有时间再来...
    99+
    2022-12-08
    Opencv计算两条直线 Opencv计算线段角度
  • 怎么使用C#最小二乘法拟合曲线成直线
    这篇文章主要介绍了怎么使用C#最小二乘法拟合曲线成直线的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么使用C#最小二乘法拟合曲线成直线文章都会有所收获,下面我们一起来看看吧。最小二乘法拟合曲线成直线效果拟合前...
    99+
    2023-07-05
  • Opencv实现联合双边滤波
    本文实例为大家分享了Opencv实现联合双边滤波的具体代码,供大家参考,具体内容如下 1.介绍 双边滤波是一种可以保边去噪的滤波器,主要是因为它的核比较特殊,公式(1)为它的调用公式...
    99+
    2024-04-02
  • java实现直线分形山脉
    本文实例为大家分享了java实现直线分形山脉的具体代码,供大家参考,具体内容如下 直线分形 直线分形平面山脉 想要实现这个效果的思想就是,由x1、x2所确定的一条直线,我们取它们的中...
    99+
    2024-04-02
  • python3-曲线拟合(polyfit
    【polyfit】多项式曲线拟合 【polyval】多项式曲线求值 import numpy as np import matplotlib.pyplot as plt x_data = np.random.rand(100).as...
    99+
    2023-01-31
    曲线 polyfit
  • Qt结合OpenCV部署yolov5的实现
    目录一、新建项目 UI设计二、代码部分 mainwindow 类三、效果演示分别使用了openvino,opencv_cuda进行加速。 关于演示视频及代码讲解请查看:https:/...
    99+
    2024-04-02
  • Python实现批量梯度下降法(BGD)拟合曲线
    1. 导入库 import numpy as np #矩阵运算 import matplotlib.pyplot as plt #可视化 import random #产生数据扰...
    99+
    2024-04-02
  • C++OpenCV模拟实现微信跳一跳
    目录前提精要:实机演示Gif:思路:获取小黑人的位置:获取终点的位置:需要自定义的:完整项目:项目结构pch.hmain.cpp 前提精要: 本程序参考了大量的大佬佬的代码,在此基础...
    99+
    2024-04-02
  • python实现三维拟合
    from matplotlib import pyplot as plt import numpy as np from mpl_toolkits.mplot3d import Axes3D fig = plt.figure() a...
    99+
    2023-01-31
    python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作