資源簡介
基于C++的opencv循跡部分,已經實現了長直線檢測突破,然后簡單處理一下即可實現循跡

代碼片段和文件信息
#define?_USE_MATH_DEFINES
#include?
#include??
#include?????
#include??
#include??
using?namespace?std;
using?namespace?cv;
class?LineFinder?{
private:
Mat?img; //原圖
vectorlines; //向量中檢測到的直線的端點
double?deltaRho;
double?deltaTheta;
int?minVote;
double?minLength;
double?maxGap;
public:
LineFinder()?:deltaRho(1)?deltaTheta(M_PI?/?180)?minVote(10)?minLength(0.)?maxGap(0.)?{};
void?setAccResolution(double?dRho?double?dTheta)?{
deltaRho?=?dRho;
deltaTheta?=?dTheta;
}
void?setMinVote(int?minv)?{
minVote?=?minv;
}
void?setLineLengthAndGap(double?length?double?gap)?{
minLength?=?length;
maxGap?=?gap;
}
vectorfindLines(Mat?&binary)?{
lines.clear();
HoughLinesP(binary?lines?deltaRho?deltaTheta?minVote?minLength?maxGap);
return?lines;
}
//繪制檢測到的直線
void?drawDetectedLines(Mat?&image?Scalar?color?=?Scalar(255?255?255))?{
//畫線
vector::const_iterator?it2?=?lines.begin();
while?(it2?!=?lines.end())
{
Point?pt1((*it2)[0]?(*it2)[1]);
Point?pt2((*it2)[2]?(*it2)[3]);
line(image?pt1?pt2?color);
++it2;
}
}
};
int?main()?{
Mat?image?=?imread(“G:/Opencv/road.jpg“);
namedWindow(“image“);
imshow(“image“?image);
Mat?result;
cvtColor(image?result?CV_BGR2GRAY);
//應用Canny算法
Mat?contours;
Canny(result????
contours????
125????
350);???
LineFinder?finder;
finder.setLineLengthAndGap(100?20);
finder.setMinVote(80);
vectorlines?=?finder.findLines(contours);
int?n?=?0;????//選擇line?0
Mat?oneline(contours.size()?CV_8U?Scalar(0));
line(oneline
Point(lines[n][0]?lines[n][1])
Point(lines[n][2]?lines[n][3])
Scalar(255)
5
);
bitwise_and(contours?oneline?oneline);
Mat?oneLineInv;????//白色直線反轉后的圖像
threshold(oneline
oneLineInv
128???
255???
THRESH_BINARY_INV);
cvNamedWindow(“One?line“);
imshow(“One?line“?oneLineInv);
vectorpoints;
for?(int?y?=?0;?y? {
//y行
uchar?*rowPtr?=?oneline.ptr(y);
for?(int?x?=?0;?x? {
if?(rowPtr[x])
{
points.push_back(Point(x?y));
}
}
}
Vec4f?lineVec;
fitLine(Mat(points)
lineVec
CV_DIST_L2???
0????
0.01?0.01);???
int?x0?=?lineVec[2];????
int?y0?=?lineVec[3];
int?x1?=?x0?-?200?*?lineVec[0];???
int?y1?=?y0?-?200?*?lineVec[1];????
cv::line(result?Point(x0?y0)?Point(x1?y1)?Scalar(0)?3);
cvNamedWindow(“Estimated?line“);
imshow(“Estimated?line“?result);
waitKey(0);
return?0;
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2017-12-02?15:19??直線檢測\
?????目錄???????????0??2017-12-02?14:50??直線檢測\.vs\
?????目錄???????????0??2017-12-02?14:50??直線檢測\.vs\直線檢測\
?????目錄???????????0??2017-12-02?14:50??直線檢測\.vs\直線檢測\v14\
?????文件???????29184??2017-12-02?15:19??直線檢測\.vs\直線檢測\v14\.suo
?????目錄???????????0??2017-11-29?16:33??直線檢測\Debug\
?????目錄???????????0??2017-12-02?14:50??直線檢測\x64\
?????目錄???????????0??2017-12-02?15:03??直線檢測\x64\Debug\
?????文件??????133120??2017-12-02?15:03??直線檢測\x64\Debug\直線檢測.exe
?????文件??????595792??2017-12-02?15:03??直線檢測\x64\Debug\直線檢測.ilk
?????文件?????1421312??2017-12-02?15:03??直線檢測\x64\Debug\直線檢測.pdb
?????文件????????1318??2017-11-29?16:32??直線檢測\直線檢測.sln
?????文件????12292096??2017-12-02?15:19??直線檢測\直線檢測.VC.db
?????目錄???????????0??2017-12-02?15:03??直線檢測\直線檢測\
?????目錄???????????0??2017-12-02?14:50??直線檢測\直線檢測\Debug\
?????文件??????543744??2017-11-29?16:33??直線檢測\直線檢測\Debug\vc140.idb
?????文件??????806912??2017-11-29?16:33??直線檢測\直線檢測\Debug\vc140.pdb
?????文件????????1643??2017-11-29?16:33??直線檢測\直線檢測\Debug\直線檢測.log
?????文件??????326196??2017-11-29?16:33??直線檢測\直線檢測\Debug\直線檢測.obj
?????目錄???????????0??2017-12-02?14:51??直線檢測\直線檢測\Debug\直線檢測.tlog\
?????文件?????????952??2017-11-29?16:33??直線檢測\直線檢測\Debug\直線檢測.tlog\CL.command.1.tlog
?????文件???????19644??2017-11-29?16:33??直線檢測\直線檢測\Debug\直線檢測.tlog\CL.read.1.tlog
?????文件?????????452??2017-11-29?16:33??直線檢測\直線檢測\Debug\直線檢測.tlog\CL.write.1.tlog
?????文件???????????2??2017-11-29?16:33??直線檢測\直線檢測\Debug\直線檢測.tlog\li
?????文件???????????2??2017-11-29?16:33??直線檢測\直線檢測\Debug\直線檢測.tlog\li
?????文件???????????2??2017-11-29?16:33??直線檢測\直線檢測\Debug\直線檢測.tlog\li
?????文件???????????0??2017-11-29?16:33??直線檢測\直線檢測\Debug\直線檢測.tlog\unsuccessfulbuild
?????文件?????????210??2017-11-29?16:33??直線檢測\直線檢測\Debug\直線檢測.tlog\直線檢測.lastbuildstate
?????目錄???????????0??2017-12-02?14:51??直線檢測\直線檢測\x64\
?????目錄???????????0??2017-12-02?15:03??直線檢測\直線檢測\x64\Debug\
?????文件??????543744??2017-12-02?15:03??直線檢測\直線檢測\x64\Debug\vc140.idb
............此處省略15個文件信息
- 上一篇:Delphi2Cppdelphi代碼轉換為C++代碼
- 下一篇:數據結構c語言版本
評論
共有 條評論