资源简介
代码中除了用OpenCV3.3库函数进行直线拟合,还自己根据拟合公式写了一个拟合接口函数,两个拟合出来的效果是一样的。
代码片段和文件信息
// LineFit.cpp : 此文件包含 “main“ 函数。程序执行将在此处开始并结束。
//
#include “pch.h“
#include
#include
#include
#include
using namespace std;
using namespace cv;
//直线拟合
static void LinearFitting(vector xvector y double &slopedouble &interceptdouble &r_square)
{
int size_x = x.size();
int size_y = y.size();
double xmean = 0.0;
double ymean = 0.0;
for (size_t i = 0; i < size_x; i++)
{
xmean += x.at(i);
ymean += y.at(i);
}
xmean /= size_x;
ymean /= size_y;
double sumx2 = 0.0;
double sumy2 = 0.0;
double sumxy = 0.0;
for (size_t i = 0; i < size_x; i++)
{
sumx2 += (x.at(i) - xmean)*(x.at(i) - xmean);
sumy2 += (y.at(i) - ymean)*(y.at(i) - ymean);
sumxy += (y.at(i) - ymean)*(x.at(i) - xmean);
}
slope = sumxy / sumx2;
intercept = ymean - slope * xmean;
r_square = sumxy * sumxy / (sumx2*sumy2);
}
int main()
{
vectorpoints;
//(27 39) (8 5) (8 9) (16 22) (44 71) (35 44) (43 57) (19 24) (27 39) (37 52)
points.push_back(Point(27 39));
points.push_back(Point(8 5));
points.push_back(Point(8 9));
points.push_back(Point(16 22));
points.push_back(Point(44 71));
points.push_back(Point(35 44));
points.push_back(Point(43 57));
points.push_back(Point(19 24));
points.push_back(Point(27 39));
points.push_back(Point(37 52));
Mat src = Mat::zeros(400 400 CV_8UC3);
for (size_t i = 0; i < points.size(); i++)
{
circle(src points[i] 3 Scalar(0 0 255) 1 8);
}
//构建A矩阵
int N = 2;
Mat A = Mat::zeros(N N CV_64FC1);
for (int row = 0; row < A.rows; row++)
{
for (int col = 0; col < A.cols; col++)
{
for (int k = 0; k < points.size(); k++)
{
A.at(row col) = A.at(row col) + pow(points[k].x row + col);
}
}
}
//构建B矩阵
Mat B = Mat::zeros(N 1 CV_64FC1);
for (int row = 0; row < B.rows; row++)
{
for (int k = 0; k < points.size(); k++)
{
B.at(row 0) = B.at(row 0) + pow(points[k].x row)*points[k].y;
}
}
//A*X=B
Mat X;
//cout << A << endl << B << endl;
solve(A B X DECOMP_LU);
cout << X << endl;
vectorlines;
for (int x = 0; x < src.size().width; x++)
{ // y = b + ax;
double y = X.at(0 0) + X.at(1 0)*x;
printf(“(%d%lf)\n“ x y);
lines.push_back(Point(x y));
}
polylines(src lines false Scalar(255 0 0) 1 8);
imshow(“src“ src);
//imshow(“src“ A);
waitKey(0);
return 0;
}
// 运行程序: Ctrl + F5 或调试 >“开始执行(不调试)”菜单
// 调试程序: F5 或调试 >“开始调试”菜单
// 入门提示:
// 1. 使用解决方案资源管理器窗口添加/管理文件
// 2. 使用团队资源管理器窗口连接到源代码管理
// 3. 使用输出窗口查看生成输出和其他消息
// 4. 使用错误列表窗口查看错误
// 5. 转到“项目”>“添加新项”以创建新的代码文件,或转到“项目”>“添加现有项”以将现有代码文件添加到项目
// 6. 将来,若要再次打开此项目,请转到“文件”>“打开”>“项目”并选择 .sln 文件
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2019-04-17 09:02 LineFit\
目录 0 2019-04-17 08:47 LineFit\.vs\
目录 0 2019-04-17 08:47 LineFit\.vs\LineFit\
目录 0 2019-04-20 17:16 LineFit\.vs\LineFit\v15\
文件 31744 2019-04-20 17:16 LineFit\.vs\LineFit\v15\.suo
文件 21962752 2019-04-20 17:16 LineFit\.vs\LineFit\v15\Browse.VC.db
目录 0 2019-04-17 08:51 LineFit\.vs\LineFit\v15\ipch\
文件 327680 2019-04-20 17:16 LineFit\.vs\LineFit\v15\ipch\47e2404320c6cc7b.ipch
文件 327680 2019-04-17 08:47 LineFit\.vs\LineFit\v15\ipch\70f61aa27d2d810e.ipch
目录 0 2019-04-17 15:32 LineFit\LineFit\
文件 1434 2019-04-17 08:47 LineFit\LineFit.sln
文件 3340 2019-04-17 15:32 LineFit\LineFit\LineFit.cpp
文件 8848 2019-04-17 09:02 LineFit\LineFit\LineFit.vcxproj
文件 1155 2019-04-17 08:47 LineFit\LineFit\LineFit.vcxproj.filters
文件 165 2019-04-17 08:47 LineFit\LineFit\LineFit.vcxproj.user
文件 200 2019-04-17 08:47 LineFit\LineFit\pch.cpp
文件 639 2019-04-17 08:47 LineFit\LineFit\pch.h
目录 0 2019-04-17 09:02 LineFit\LineFit\x64\
目录 0 2019-04-17 10:19 LineFit\LineFit\x64\Debug\
文件 608 2019-04-17 10:19 LineFit\LineFit\x64\Debug\LineFit.log
文件 677832 2019-04-17 10:19 LineFit\LineFit\x64\Debug\LineFit.obj
文件 2031616 2019-04-17 09:02 LineFit\LineFit\x64\Debug\LineFit.pch
目录 0 2019-04-17 10:19 LineFit\LineFit\x64\Debug\LineFit.tlog\
文件 1522 2019-04-17 10:19 LineFit\LineFit\x64\Debug\LineFit.tlog\CL.command.1.tlog
文件 40678 2019-04-17 10:19 LineFit\LineFit\x64\Debug\LineFit.tlog\CL.read.1.tlog
文件 1140 2019-04-17 10:19 LineFit\LineFit\x64\Debug\LineFit.tlog\CL.write.1.tlog
文件 209 2019-04-17 10:19 LineFit\LineFit\x64\Debug\LineFit.tlog\LineFit.lastbuildstate
文件 1492 2019-04-17 10:19 LineFit\LineFit\x64\Debug\LineFit.tlog\li
文件 3904 2019-04-17 10:19 LineFit\LineFit\x64\Debug\LineFit.tlog\li
文件 616 2019-04-17 10:19 LineFit\LineFit\x64\Debug\LineFit.tlog\li
文件 3799 2019-04-17 09:02 LineFit\LineFit\x64\Debug\pch.obj
............此处省略7个文件信息
- 上一篇:2015年国赛数学建模
- 下一篇:gcc-4.9.3 安装依赖组件 (以此为准)
相关资源
- OpenCV相机姿态更新
- vc opencv 条形码 识别
- opencv jpeg 编解码
- opencv2.0中的lib和dll,跑别人程序时可
- 颜色直方图匹配算法opencv实现
- opencv控制多摄像头
- 基于opencv的圆心坐标提取
- 基于标识的AR的OpenCV实现
- Opencv2.4.9参考手册
- 基于opencv2.4.3、VS2010的背景差分法目标
- 车道线检测代码OpenCv以及理论算法说
- 行人跟踪OPENCV代码
- 基于opencv的人脸检测
- 多目标跟踪
- opencv 求二值化图像的形心
- opencv 学习笔记,个人整理的
- 车牌识别代码arm-Linux,opencv
- OPENCV函数手册(带目录)+OpenCV中文参
- opencv实现行人检测
- VC +opencv识别图像中图形显示于界面
- opencv运动物体检测
- 基于opencv 的图像局部放大
- Opencv静态手势识别
- 双边滤波opencv实现
- 图像的平均亮度
- Opencv绘制物体轮廓,定位主要物件坐
-
OpenCV生成xm
l分类器文件 - Linux下QT及OpenCV搭建
- 张正友相机标定(OpenCV实现)223402
- Adaboost人头部检测 opencv vc
评论
共有 条评论