資源簡介
代碼中除了用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? {
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? {
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? {
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? {
for?(int?col?=?0;?col? {
for?(int?k?=?0;?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? {
for?(int?k?=?0;?k? {
B.at(row?0)?=?B.at(row?0)?+?pow(points[k].x?row)*points[k].y;
}
}
//A*X=B
Mat?X;
//cout?< solve(A?B?X?DECOMP_LU);
cout?< vectorlines;
for?(int?x?=?0;?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 安裝依賴組件 (以此為準)
評論
共有 條評論