车道线检测算法经典编程 您所在的位置:网站首页 车道检测的三种算法 车道线检测算法经典编程

车道线检测算法经典编程

2022-05-21 06:20| 来源: 网络整理| 查看: 265

车道线检测算法经典编程

车道线曲线拟合算法编程

计算经过(50,50),(90,120),(70,200)三点的Catmull_Rom样条曲线。

在这里插入图片描述

IplImage* img = cvCreateImage(cvSize(300,300), 8, 1);

for (int i = 0; i < img->height; ++i)

{

for (int j = 0; j < img->width; ++j) { ((char *)(img->imageData + img->widthStep * (i)))[j] = 0; }

}

CvPoint point0,point1,point2,point3,point4;//3个控制点来做

point1.x = 50;

point1.y = 50;

point2.x = 90;

point2.y = 120;

point3.x = 70;

point3.y = 200;

point0.x = point1.x+(point1.x-point2.x);

point0.y = point1.y+(point1.y-point2.y);

point4.x = point3.x+(point3.x-point2.x);

point4.y = point3.y+(point3.y-point2.y);

((char *)(img->imageData + img->widthStep * (point1.y)))[point1.x] = 255;

((char *)(img->imageData + img->widthStep * (point2.y)))[point2.x] = 255;

((char *)(img->imageData + img->widthStep * (point3.y)))[point3.x] = 255;

for (int i = 1; i < 500 ; i++) {

float t = (float) i * (1.0f / (float) 500); float tt = t * t; float ttt = tt * t; CvPoint pi; pi.x = 0.5 * (2*point1.x+(point2.x-point0.x)*t + (2*point0.x-5*point1.x+4*point2.x-point3.x)*tt + (3*point1.x-point0.x-3*point2.x+point3.x)*ttt); pi.y = 0.5 * (2*point1.y+(point2.y-point0.y)*t + (2*point0.y-5*point1.y+4*point2.y-point3.y)*tt + (3*point1.y-point0.y-3*point2.y+point3.y)*ttt); ((char *)(img->imageData + img->widthStep * (pi.y)))[pi.x] = 255;

}

for (int i = 1; i < 500 ; i++) {

float t = (float) i * (1.0f / (float) 500); float tt = t * t; float ttt = tt * t; CvPoint pi; pi.x = 0.5 * (2*point2.x+(point3.x-point1.x)*t + (2*point1.x-5*point2.x+4*point3.x-point4.x)*tt + (3*point2.x-point1.x-3*point3.x+point4.x)*ttt); pi.y = 0.5 * (2*point2.y+(point3.y-point1.y)*t + (2*point1.y-5*point2.y+4*point3.y-point4.y)*tt + (3*point2.y-point1.y-3*point3.y+point4.y)*ttt); ((char *)(img->imageData + img->widthStep * (pi.y)))[pi.x] = 255;

}

cvShowImage(“scr”, img);

cvWaitKey(0);

return 0;

检测出Hough空间的曲线,规定如下搜索方法:

霍夫空间中相交的曲线越多,交点表示的线在笛卡尔坐标系对应的点越多。我们在霍夫空间中定义交点的最小阈值来检测线。霍夫变换跟踪了帧中的每个点的霍夫空间交点。如果交点数量超过了阈值就确定一条对应参数 θ 和 d的线。 在这里插入图片描述

1>起始搜索点为A点

2>向右搜索,直到退出,退出点为B

3>从B点向左搜索,直到退出

4>起始搜索点回到A点

5>向左搜索,直到退出,退出点为C

6>从C点向右搜索,直到退出

结束

在这里插入图片描述

部分代码如下:

向左搜索:

CvPoint searchRight(int HoughArea, IplImage hough, CvPoint point, Lines line)

{//找当前点的上、右上、右、右下、下

//循环搜索,直到两个方向搜索均无结果,则退出开始下一步判断 CvPoint start;//搜索的初始点 start = point;//先将point作为当前的初始点 int Max = 0;//找局部最大值 CvPoint last = start;//记录上一次最大值,本次搜索排除当前点和上一次点 int mistakes = 0;//引入一个容错因子 //****************************搜索上,右上,右,右下,下*****************************8 while(1) { CvPoint temp; if(start.x >= hough->width-1 || start.y = hough->height-1)//超出搜索范围,退出搜索 break; //cout


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有