代码来自 https://blog.csdn.net/guduruyu/article/details/72866144,略有修改

#include <opencv2/opencv.hpp>#define ORDER 4bool polynomial_curve_fit(std::vector<cv::Point>& key_point, int n, cv::Mat& A)
{//Number of key pointsint N = key_point.size();//构造矩阵Xcv::Mat X = cv::Mat::zeros(n + 1, n + 1, CV_64FC1);for (int i = 0; i < n + 1; i++){for (int j = 0; j < n + 1; j++){for (int k = 0; k < N; k++){X.at<double>(i, j) = X.at<double>(i, j) +std::pow(key_point[k].x, i + j);}}}//构造矩阵Ycv::Mat Y = cv::Mat::zeros(n + 1, 1, CV_64FC1);for (int i = 0; i < n + 1; i++){for (int k = 0; k < N; k++){Y.at<double>(i, 0) = Y.at<double>(i, 0) +std::pow(key_point[k].x, i) * key_point[k].y;}}A = cv::Mat::zeros(n + 1, 1, CV_64FC1);//求解矩阵Acv::solve(X, Y, A, cv::DECOMP_LU);return true;
}int main()
{//创建用于绘制的深蓝色背景图像cv::Mat image = cv::Mat::zeros(480, 640, CV_8UC3);image.setTo(cv::Scalar(100, 0, 0));//输入拟合点  std::vector<cv::Point> points;points.push_back(cv::Point(100., 58.));points.push_back(cv::Point(150., 70.));points.push_back(cv::Point(200., 90.));points.push_back(cv::Point(252., 140.));points.push_back(cv::Point(300., 220.));points.push_back(cv::Point(350., 400.));//将拟合点绘制到空白图上  for (int i = 0; i < points.size(); i++){cv::circle(image, points[i], 5, cv::Scalar(0, 0, 255), 2, 8, 0);}//绘制折线cv::polylines(image, points, false, cv::Scalar(0, 255, 0), 1, 8, 0);cv::Mat A;polynomial_curve_fit(points, ORDER, A);std::cout << "A = " << A << std::endl;std::vector<cv::Point> points_fitted;for (int x = 0; x < 400; x++){double y = A.at<double>(0, 0);for(int i = 0; i < ORDER; i++){y += A.at<double>(i + 1, 0) *std::pow(x, i + 1);}points_fitted.push_back(cv::Point(x, y));}cv::polylines(image, points_fitted, false, cv::Scalar(0, 255, 255), 1, 8, 0);cv::imwrite("result.jpg", image);cv::imshow("image", image);cv::waitKey(0);return 0;
}

上面代码中,如果ORDER为1,就是线性变换,

拟合结果为(黄色为拟合曲线)

如果ORDER为2,就是二维曲线,拟合结果为:

如果ORDER为3,就是三维曲线,拟合结果为:

如果ORDER为4,就是三维曲线,拟合结果为:

opencv拟合高维曲线相关推荐

  1. python函数拟合不规则曲线_python曲线拟合

    Python曲线拟合 前言 这篇文章的由来:前几天在做大学物理居家实验水滴法测量声速的时候需要使用phyphox软件导出的数据拟合y=1/(a+b*x)曲线.虽然老师要求使用Origin软件拟合,但是 ...

  2. python最小二乘法拟合三维曲线_python_numpy最小二乘法的曲线拟合

    在了解了最小二乘法的基本原理之后python_numpy实用的最小二乘法理解,就可以用最小二乘法做曲线拟合了 1.直线拟合 直线拟合 已知图中拟合数据的坐标,对图中的拟合数据进行直线拟合. 依旧使用最 ...

  3. opencv拟合多边形

    用例: std::vector<std::vector<cv::Point>> contours; std::vector<cv::Vec4i> hierachy; ...

  4. Opencv—— 拟合直线

    概念 最小二乘法是勒让德( A. M. Legendre)于1805年在其著作<计算慧星轨道的新方法>中提出的. 最小二乘法就是通过最小化误差的平方和,使得拟合对象无限接近目标对象.在图像 ...

  5. python函数拟合不规则曲线_python 对任意数据和曲线进行拟合并求出函数表达式的三种解决方案...

    第一种是进行多项式拟合,数学上可以证明,任意函数都可以表示为多项式形式.具体示例如下. ###拟合年龄 import numpy as np import matplotlib.pyplot as p ...

  6. python 拟合sigmoid曲线_Scipy-sigmoid曲线拟合

    我有一些数据点,想找到一个拟合函数,我想一个累积高斯乙状窦函数会拟合,但我真的不知道如何实现这一点. 这就是我现在所拥有的:import numpy as np import pylab from s ...

  7. OpenCV:判定曲线为弧线的简单方法

    借鉴了一个前同事的一个代码段(良心代码),功能为判定曲线为弧线,并且给出拟合度: 代码段: //寻找所有canny 弧int findArcsOfAllCanny( cv::Mat &inMa ...

  8. matlab画出拟合的曲线,matlab画出拟合曲线

    matlab曲线拟合 39页 免费 用微软excel进行非线性曲线... 21页... 曲线拟合工具箱 (Curve Fitting Toolbox) 对数据进行曲线拟合,给出数学建模中的实例 用以介 ...

  9. OpenCV 拟合抛物线精简版

    直接上代码,原理自行寻找,网上多得很 #include <opencv2/opencv.hpp> // opencv #include <stdio.h> // 内存操作 #i ...

最新文章

  1. 5y计算机应用基础题库,数学log练习题和答案.doc
  2. 欢迎使用CSDN-markdown编辑器7-3
  3. 格力公布“酒后模式”手机专利 网友:喝多了可以光明正大不结账了
  4. docker pull 私有_Docker系列教程03Docker私有仓库搭建(registry)
  5. 汇编语言典型例子详解_汇编语言例子_汇编语言 举例子
  6. 以下属于4nf的分解为_数据库原理·模拟试卷及答案(1)
  7. 大话西游手游服务器维护要多久,2018年11月22日维护公告
  8. 520 miix 小兵 黑苹果_【黑果小兵】macOS Big Sur 11.0.1 20B50 正式版 with Clover 5126 黑苹果系统镜像下载...
  9. 25th Sept 2014:《数学分析八讲读书笔记》
  10. JDBC的下载和安装教程
  11. Cisco Devnet CCNA【200-901】题库稳定
  12. java 重写或者覆父类方法的使用throws 抛出异常,为什么要小于父类父类,java面试点
  13. 【税务硕士论文】跨国公司无形资产转让定价税制改革探究(节选)
  14. 某资讯App signature签名分析 (一)
  15. Mac中代理配置不稳定生效
  16. SpringCloud(7) LCN分布式事务框架入门
  17. AJAX之封装+跨域
  18. 获取当前时间戳13位
  19. echarts 配置项手册legend
  20. python实现按键精灵找色点击功能,使用pywin32和Pillow库

热门文章

  1. 你哪来这么多事(二):学生信息查找
  2. java处理中文字符_Java中文字符处理的四大迷题
  3. Android 双屏开发 Presentation 的使用教程
  4. Dubbo 18 问
  5. 第一篇博客,纪念一下,终于开通啦!
  6. 深度学习 vs 机器学习 vs 模式识别
  7. Java Web项目结构
  8. JDBC连接MySQL数据库及演示样例
  9. 原始ajax方式调用asp.net后台方法
  10. SQL Server DATEADD() 函数