• 大小: 5.67MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-10-22
  • 语言: C/C++
  • 标签: opencv  循迹  

资源简介

基于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 < oneline.rows; y++)
{
//y行
uchar *rowPtr = oneline.ptr(y);
for (int x = 0; x < oneline.cols; 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\link.command.1.tlog
     文件           2  2017-11-29 16:33  直线检测\直线检测\Debug\直线检测.tlog\link.read.1.tlog
     文件           2  2017-11-29 16:33  直线检测\直线检测\Debug\直线检测.tlog\link.write.1.tlog
     文件           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个文件信息

评论

共有 条评论