资源简介
基于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语言版本
相关资源
- 任意曲线(S型等)调整图像色调,对
- Visual C++利用OpenCV对图像进行人脸识别
- 运用opencv的c++图像单点相关系数匹配
- VS2008 opencv MFC 计算米粒的个数及最大
- 14_车牌识别系统.zip
- 13_车型识别系统.zip
- 人脸跟踪基于opencv
- surf特征提取与匹配
- SRAD算法C++实现
- MFC+Opencv 摄像头保存为图像和视频
- TLD 全C++代码 OpenCV3.0.0 VS2013 工程文件
- [源码&文档] 基于OpenCV的室内目标跟踪
- 基于特征点匹配的视频稳像
- 制作自己的MFC MDI OPENCV程序框架
- 基于opencv开发的谷歌小恐龙的小游戏
- OpenCV图像模糊程序 by浅墨
- Opencv和vc++6.0一些常用图像处理算法程
- c++开发ocx入门实践三--基于opencv的简易
- opencv+c++实现人脸识别
- 基于OPENCV的完整图像处理程序
- MFC下opencv的图像处理源码
- OpenCV C++完整的车牌识别系统.rar
- OpenCV_MFC_版本1.0.1
- OpenCV_MFC_版本1.0
- opencv MFC 摄像头 人脸识别
- 实用的角度识别OPENCV
- opencv结合MFC进行人脸检测
- 基于opencv的傅里叶描述子VC++代码
- 简单的OpenCV实现摄像头实时显示和视
- Mastering Opencv3英文第二版
评论
共有 条评论