opencv拟合高维曲线
代码来自 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拟合高维曲线相关推荐
- python函数拟合不规则曲线_python曲线拟合
Python曲线拟合 前言 这篇文章的由来:前几天在做大学物理居家实验水滴法测量声速的时候需要使用phyphox软件导出的数据拟合y=1/(a+b*x)曲线.虽然老师要求使用Origin软件拟合,但是 ...
- python最小二乘法拟合三维曲线_python_numpy最小二乘法的曲线拟合
在了解了最小二乘法的基本原理之后python_numpy实用的最小二乘法理解,就可以用最小二乘法做曲线拟合了 1.直线拟合 直线拟合 已知图中拟合数据的坐标,对图中的拟合数据进行直线拟合. 依旧使用最 ...
- opencv拟合多边形
用例: std::vector<std::vector<cv::Point>> contours; std::vector<cv::Vec4i> hierachy; ...
- Opencv—— 拟合直线
概念 最小二乘法是勒让德( A. M. Legendre)于1805年在其著作<计算慧星轨道的新方法>中提出的. 最小二乘法就是通过最小化误差的平方和,使得拟合对象无限接近目标对象.在图像 ...
- python函数拟合不规则曲线_python 对任意数据和曲线进行拟合并求出函数表达式的三种解决方案...
第一种是进行多项式拟合,数学上可以证明,任意函数都可以表示为多项式形式.具体示例如下. ###拟合年龄 import numpy as np import matplotlib.pyplot as p ...
- python 拟合sigmoid曲线_Scipy-sigmoid曲线拟合
我有一些数据点,想找到一个拟合函数,我想一个累积高斯乙状窦函数会拟合,但我真的不知道如何实现这一点. 这就是我现在所拥有的:import numpy as np import pylab from s ...
- OpenCV:判定曲线为弧线的简单方法
借鉴了一个前同事的一个代码段(良心代码),功能为判定曲线为弧线,并且给出拟合度: 代码段: //寻找所有canny 弧int findArcsOfAllCanny( cv::Mat &inMa ...
- matlab画出拟合的曲线,matlab画出拟合曲线
matlab曲线拟合 39页 免费 用微软excel进行非线性曲线... 21页... 曲线拟合工具箱 (Curve Fitting Toolbox) 对数据进行曲线拟合,给出数学建模中的实例 用以介 ...
- OpenCV 拟合抛物线精简版
直接上代码,原理自行寻找,网上多得很 #include <opencv2/opencv.hpp> // opencv #include <stdio.h> // 内存操作 #i ...
最新文章
- 5y计算机应用基础题库,数学log练习题和答案.doc
- 欢迎使用CSDN-markdown编辑器7-3
- 格力公布“酒后模式”手机专利 网友:喝多了可以光明正大不结账了
- docker pull 私有_Docker系列教程03Docker私有仓库搭建(registry)
- 汇编语言典型例子详解_汇编语言例子_汇编语言 举例子
- 以下属于4nf的分解为_数据库原理·模拟试卷及答案(1)
- 大话西游手游服务器维护要多久,2018年11月22日维护公告
- 520 miix 小兵 黑苹果_【黑果小兵】macOS Big Sur 11.0.1 20B50 正式版 with Clover 5126 黑苹果系统镜像下载...
- 25th Sept 2014:《数学分析八讲读书笔记》
- JDBC的下载和安装教程
- Cisco Devnet CCNA【200-901】题库稳定
- java 重写或者覆父类方法的使用throws 抛出异常,为什么要小于父类父类,java面试点
- 【税务硕士论文】跨国公司无形资产转让定价税制改革探究(节选)
- 某资讯App signature签名分析 (一)
- Mac中代理配置不稳定生效
- SpringCloud(7) LCN分布式事务框架入门
- AJAX之封装+跨域
- 获取当前时间戳13位
- echarts 配置项手册legend
- python实现按键精灵找色点击功能,使用pywin32和Pillow库