车道线检测算法经典编程 | 您所在的位置:网站首页 › 车道检测的三种算法 › 车道线检测算法经典编程 |
车道线检测算法经典编程 车道线曲线拟合算法编程计算经过(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 实验室设备网 版权所有 |