fitLine实现

fitLine实现原理参考 直线拟合 最小二乘法 hough 变换 include iostream include opencv2 opencv hpp usingnamespa usingnamespa voidfitline std vector cv Point amp points cv Vec4f amp line para intN points size if N lt 2 retu cv Point opencv2 iostream

原理参考:直线拟合——最小二乘法、hough变换

/ * @description: 直线拟合 * @param points 输入点集 * @param line_para 直线参数 */ void fitline(std::vector<cv::Point>& points, cv::Vec4f& line_para) { 
    int N = points.size(); if (N < 2) return; double sum_x = 0, sum_y = 0, sum_xx = 0, sum_xy = 0, sum_yy = 0; for (int i = 0; i < N; i++) { 
    sum_x += points[i].x; sum_y += points[i].y; sum_xx += points[i].x * points[i].x; sum_xy += points[i].x * points[i].y; sum_yy += points[i].y * points[i].y; } //least squares: y=kx+b float k = (N*sum_xy-sum_x*sum_y) / (N*sum_xx - sum_x*sum_x); float b = (sum_xx*sum_y - sum_x*sum_xy) / (N*sum_xx - sum_x*sum_x); std::cout << "k = " << k << ", b = " << b << std::endl; //total least squares: ax+by+c=0  float A, B, C; float mean_x = sum_x / N, mean_y = sum_y / N, mean_xx = sum_xx / N, mean_xy = sum_xy / N, mean_yy = sum_yy / N; cv::Mat m = (cv::Mat_<float>(2, 2) << mean_xx - mean_x*mean_x, mean_xy - mean_x*mean_y, mean_xy - mean_x*mean_y, mean_yy - mean_y*mean_y); cv::Mat eigenvalue, eigenvector; cv::eigen(m * N, eigenvalue, eigenvector); float v0 = eigenvalue.at<float>(0, 0), v1 = eigenvalue.at<float>(0, 1); if (abs(v0) < abs(v1)) { 
    A = eigenvector.at<float>(0, 0); B = eigenvector.at<float>(0, 1); } else { 
    A = eigenvector.at<float>(1, 0); B = eigenvector.at<float>(1, 1); } C = -(A*mean_x + B*mean_y); std::cout << "k = " << -A / B << ", b = " << -C / B << std::endl; line_para[0] = B; line_para[1] = -A; line_para[2] = mean_x; line_para[3] = mean_y; } 

代码传送门:https://github.com/taifyang/OpenCV-algorithm

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/211725.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午9:45
下一篇 2026年3月18日 下午9:45


相关推荐

  • PHP学习之一晚撸下W3chscool

    PHP学习之一晚撸下W3chscoolPHP多维数组其实简单的而言,多维数组就是由单个的数组组成的,两个数组嵌套组成一个二维数组,三个顾名思义就是三维数组。先来一个简单的数组。数字是key,引号里的是value<?php$array=array(‘1’=>”咋”,’2’=>”日”);echo$array[2];?>输出:日然后再来几个有难…

    2022年8月22日
    8
  • 全面解析无线局域网技术的概念及其特点

    全面解析无线局域网技术的概念及其特点本文来之 url http xuzhijun blog 51cto com 36448 url 文章介绍了无线局域网的概念及特点 从 IEEE802 11X HiperLAN HomeRF 中国无线局域网规范等方面介绍了无线局域网标准 介绍了无线局域网结构 并对无线局域网的安全问题进行了讨论 对无线局域网的应用进行了阐述 1 前言通

    2026年3月17日
    2
  • es5简单总结

    es5简单总结建议张鑫旭原文内容导读 1 简介 2 浏览器支持 3 ES5 的严格模式 4 JSON5 添加对象 6 额外的数组 7 Function prototype bind8 补充参考简介 ECMAScript5 1 或仅 ES5 是 ECMAScript 基于 JavaScript 的规范 标准最新修正 与 HTML5 规范进程本质类似 ES5 通过对现有 JavaScript 方法添加语

    2025年12月3日
    6
  • spring cloud feign调用原理_vip解析的原理

    spring cloud feign调用原理_vip解析的原理Feign是⼀个HTTP请求的轻量级客户端框架。通过接口+注解的方式发起HTTP请求调用,面向接口编程,而不是像Java中通过封装HTTP请求报文的方式直接调用。服务消费方拿到服务提供方的接⼝,然后像调⽤本地接⼝⽅法⼀样去调⽤,实际发出的是远程的请求。让我们更加便捷和优雅的去调⽤基于HTTP的API,被⼴泛应⽤在SpringCloud的解决⽅案中。…

    2026年4月17日
    5
  • Springboot创建项目(idea版本)

    Springboot创建项目(idea版本)一 概述由于 springboot 项目 不管是 java 工程还是 web 工程都可以直接以 jar 方式运行 所以推荐创建 jar 工程 这里创建 jar 工程项目为例 二 两种方式创建 springboot 项目 1 第一种方式手动在 idea 中 new 一个新的项目 选择 maven 工程完成的结构如图

    2026年3月26日
    2
  • 2021编程语言排行榜出炉

    2021编程语言排行榜出炉今日,IEEESpectrum发布了2021年度编程语言排行榜,其中Python在总榜单以及其他几个分榜单中依然牢牢占据第一名的位置。另外值得关注的是微软C#语言,它的排行从2020年的第23名跃升至了今年的第6名,称得上是今年的大势语言。2021年度编程语言排行榜依然从8个信息源按照11种指标收集数据,最终得到了数十种编程语言流行度的整体排名。这8个信息源分别为CareerBuilder、GitHub、Google、HackerNews、IEEE、Reddi

    2022年7月15日
    17

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号