OpenCV实现直线拟合
作者:我有一個夢想 发布时间:2023-06-22 15:22:37
相比于直线检测,直线拟合的最大特点是将所有数据只拟合出一条直线
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;
}
来源:https://blog.csdn.net/B08370108/article/details/118105855
![](https://www.aspxhome.com/images/zang.png)
![](https://www.aspxhome.com/images/jiucuo.png)
猜你喜欢
- 项目概况:Spring Cloud搭的微服务,使用了eureka,FeignClient,现在遇到FeignClient调用接口时不支持上传
- 背景在Spring boot项目开发中经常遇到需要使用枚举的场景,比如描述状态、性别、类型等相关字段。通常这些字段在数据库会以tinyint
- 本文记录了笔者的第一个Java程序,基于Java抽象窗口工具(abstract window toolkit , AWT)和Swing(Sw
- 1.memchrmemchr的函数声明:void *memchr(const void *str, int c, size_t n);作用:
- 最近项目上要实现语音搜索功能,界面样式要模仿一下UC浏览器的样式,UC浏览器中有一个控件,会随着声音大小浮动,然后寻思偷个懒,百
- 目前的App在安装后,第一次打开,都会显示两秒左右的logo,然后进入引导页。如果关闭App,再重新打开,则只会显示logo,然后直接进入主
- 本文实例为大家分享了Android微信摇一摇功能的实现方法,供大家参考,具体内容如下import java.util.ArrayList;
- Bean三种自定义初始化和销毁一. 三种方法概述在配置类中指定 @Bean(initMethod = “init&
- 个人觉得eclipse提示较少,所以今天就写了这篇文章。使用Intellij IDEA 2018实现Hello,World的时候我遇到了一些
- 看过阿里巴巴开发手册的同学应该都会对Integer临界值127有点印象。原文中写的是:【强制】所有整型包装类对象之间值的比较,全部使用 eq
- 本文介绍C# lock关键字,C#提供了一个关键字lock,它可以把一段代码定义为互斥段(critical section),互斥段在一个时
- Spring Boot CLI是Spring Boot项目提供的一个用于快速运行Spring Boot应用的命令行工具,通过结合Groovy
- 本文实例讲述了spring AOP的After增强实现方法。分享给大家供大家参考,具体如下:一 配置<?xml version=&qu
- Logback简介1、logback和log4j是同一个作者,logback可以看作是log4j的升级版2、logback分为三个模块, l
- import java.util.ArrayList;import java.util.Collections;import java.ut
- 前言:在本文中,我们将介绍Valhalla项目——它的历史原因、当前的开发状态,以及它发布后为日常J
- 最近项目里面做了一个定时器,结果报错这个。网上的原因大多说是什么版本问题。我记录下我的问题所在。由于项目启动在局域网,不能访问互联网。打出来
- 本文实例为大家分享了winform实现五子棋游戏的具体代码,供大家参考,具体内容如下利用数组,根据新旧数组值的不同,获取那个点是什么棋子;说
- 在.NET 4.0(当然也包括4.0以前的版本)下,用反射判断某个方法是否运用了自定义Attribute时,可以通过调用MethodInfo
- 1 关于自动内存管理Java是由jvm来管理内存,包括自动分配以及自动回收,因此它不容易出现内存泄漏和内存溢出问题。C/C++,由程序员手动