车道线检测+车道线跟踪+车道线识别

您所在的位置:网站首页 车道识别图 车道线检测+车道线跟踪+车道线识别

车道线检测+车道线跟踪+车道线识别

2023-12-13 19:31| 来源: 网络整理| 查看: 265

原本打算用深度学习的,但是....各种原因。于是想着随便先实现以一下,发现效果还不错,还节约成本。美滋滋

 

现成代码美滋滋,先上个链接

http://blog.csdn.net/chongshangyunxiao321/article/details/50999212

再上图

 

用上面博客的代码,再改改参数,美滋滋。

但是会出现丢帧的情况。这对追求完美的我。。。。。。。。。的老板来说不行啊。

 

于是想用深度学习做一做。

怎么做?表急,一步一步来。。。。。

先看一下逆透视变换。这里是用的opencv的四点变换。

先上个链接,链接关了。直接上代码吧。

#include #include using namespace std; int main() { CvPoint2D32f srcQuad[4], dstQuad[4]; CvMat *warp_matrix = cvCreateMat(3, 3, CV_32FC1); IplImage *src, *dst; if (((src = cvLoadImage("D:\\路径\\3.png", 1)) != 0)) { dst = cvCloneImage(src); dst->origin = src->origin;//确定起点位置为座顶角 cvZero(dst); srcQuad[0].x = 0; srcQuad[0].y = 0; srcQuad[1].x = src->width - 1.; srcQuad[1].y = 0; srcQuad[2].x = 0; srcQuad[2].y = src->height - 1; srcQuad[3].x = src->width - 1; srcQuad[3].y = src->height - 1; //dstQuad[0].x = src->width*0.05; //dstQuad[0].y = src->height*0.33; dstQuad[0].x = srcQuad[0].x; dstQuad[0].y = srcQuad[0].y; dstQuad[1].x = src->width; dstQuad[1].y = 0; dstQuad[2].x = src->width*0.45; dstQuad[2].y = src->height; dstQuad[3].x = src->width*0.55; dstQuad[3].y = src->height; //计算透视映射矩阵 cvGetPerspectiveTransform(srcQuad, dstQuad, warp_matrix); //密集透视变换 cvWarpPerspective(src, dst, warp_matrix); cvNamedWindow("Perspective_Warp", 1); cvShowImage("Perspective_Warp", dst); cvSaveImage("result3.png", dst); cvWaitKey(); } cvReleaseImage(&dst); cvReleaseMat(&warp_matrix); return 0; }

//华丽丽的分割线,上面是车道线检测,下面是车道线跟踪

为什么要做跟踪,直接从上图中可以看出在车道检测(绿色)算法没有很好的检测出正确的车道线的时候,车道线跟踪(红色)能够很好的规避这种错误,达到理想效果。

咱这里用的kalman,我的代码太乱了,不好意思贴了。哇咔咔。这里贴一个kalman的鼠标跟踪代码。

 

#include #include #include using namespace cv; using namespace std; const int winWidth = 800; const int winHeight = 600; Point mousePosition = Point(winWidth>>1, winHeight>>1); //mouse call back void mouseEvent(int event, int x, int y, int flags, void *param) { if(event==CV_EVENT_MOUSEMOVE) { mousePosition=Point(x,y); } } int main() { //1.kalman filter setup const int stateNum=4; const int measureNum=2; KalmanFilter KF(stateNum, measureNum, 0); Mat state (stateNum, 1, CV_32FC1); //state(x,y,detaX,detaY) Mat processNoise(stateNum, 1, CV_32F); Mat measurement = Mat::zeros(measureNum, 1, CV_32F); //measurement(x,y) randn( state, Scalar::all(0), Scalar::all(0.1) ); //随机生成一个矩阵,期望是0,标准差为0.1; KF.transitionMatrix = *(Mat_(4, 4)


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3