资源简介
基于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\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语言版本
相关资源
- 人脸识别(opencv_facedetect_v4l2)
- 基于opencv的模板匹配代码
- opencv图片扫描以及校正
- opencv手部轮廓识别以及轨迹识别
- opencv2 3D标定.cpp
- 基于opencv漫水填充算法综合
- opencv激光中心线的提取
- OpenCV Computer Vision Application Programming
- 基于图割的图像分割OpenCV+MFC实现
- 识别魔方颜色
- opencv版俄罗斯方块源码
- VS2013 / MFC + OpenCV 2.4.9实现视频的播放
- 粒子滤波器+目标跟踪的C++实现,VS2
- 张平OpenCV算法精讲基于python和C++教材
- 虹膜识别开源代码OSIRIS4.1基于opencv
- Sift特征点提取与匹配opencv库
- YCbCr、混合高斯以及YCbCg肤色检测模型
- 光流法代码
- OpenCV打开摄像机显示在MFC窗口工程源
- 使用c++读取图像到二维矩阵
- 三维点云的圆柱面拟合
- MFC+OPENCV摄像机标定程序
- 基于特征脸的人脸识别MFC+OpenCV
- opencv图像处理MFC
- OPENCV人脸检测加角点检测并输出坐标
- FillHole.rar
- 道路提取算法 c++ opencv
- PCA代码实现详解
- opencv卡尔曼滤波
- SeamCarving opencv c++
评论
共有 条评论