日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

车道线检测算法经典编程

發布時間:2023/11/28 生活经验 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 车道线检测算法经典编程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

車道線檢測算法經典編程

  1. 車道線曲線擬合算法編程

計算經過(50,50),(90,120),(70,200)三點的Catmull_Rom樣條曲線。

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

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

  3. {

  4.    for (int j = 0; j < img->width; ++j)  
    
  5.    {  
    
  6.        ((char *)(img->imageData + img->widthStep * (i)))[j] = 0;  
    
  7.    }  
    
  8. }

  9. CvPoint point0,point1,point2,point3,point4;//3個控制點來做

  10. point1.x = 50;

  11. point1.y = 50;

  12. point2.x = 90;

  13. point2.y = 120;

  14. point3.x = 70;

  15. point3.y = 200;

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

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

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

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

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

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

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

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

  24.          float t = (float) i * (1.0f / (float) 500);  
    
  25.          float tt = t * t;  
    
  26.          float ttt = tt * t;  
    
  27.       CvPoint pi;  
    
  28.       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);  
    
  29.          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);  
    
  30.       ((char *)(img->imageData + img->widthStep * (pi.y)))[pi.x] = 255;  
    
  31. }

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

  33.          float t = (float) i * (1.0f / (float) 500);  
    
  34.          float tt = t * t;  
    
  35.          float ttt = tt * t;  
    
  36.       CvPoint pi;  
    
  37.       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);  
    
  38.          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);  
    
  39.       ((char *)(img->imageData + img->widthStep * (pi.y)))[pi.x] = 255;  
    
  40. }

  41. cvShowImage(“scr”, img);

  42. cvWaitKey(0);

  43. return 0;

  44. 檢測出Hough空間的曲線,規定如下搜索方法:

霍夫空間中相交的曲線越多,交點表示的線在笛卡爾坐標系對應的點越多。我們在霍夫空間中定義交點的最小閾值來檢測線。霍夫變換跟蹤了幀中的每個點的霍夫空間交點。如果交點數量超過了閾值就確定一條對應參數 θ 和 d的線。

1>起始搜索點為A點

2>向右搜索,直到退出,退出點為B

3>從B點向左搜索,直到退出

4>起始搜索點回到A點

5>向左搜索,直到退出,退出點為C

6>從C點向右搜索,直到退出

結束

部分代碼如下:

向左搜索:

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

  2. {//找當前點的上、右上、右、右下、下

  3.    //循環搜索,直到兩個方向搜索均無結果,則退出開始下一步判斷  
    
  4.    CvPoint start;//搜索的初始點  
    
  5.    start = point;//先將point作為當前的初始點  
    
  6.    int Max = 0;//找局部最大值  
    
  7.    CvPoint last = start;//記錄上一次最大值,本次搜索排除當前點和上一次點  
    
  8.    int mistakes = 0;//引入一個容錯因子  
    
  9.    //****************************搜索上,右上,右,右下,下*****************************8  
    
  10.   while(1)  
    
  11.   {  
    
  12.       CvPoint temp;  
    
  13.       if(start.x >= hough->width-1 || start.y <= 0||start.y >= hough->height-1)//超出搜索范圍,退出搜索  
    
  14.           break;  
    
  15.       //cout << "curve1" << endl;  
    
  16.       for(int xx = 0;xx < 2; xx++)  
    
  17.       {  
    
  18.           for(int yy = -1;yy < 2;yy++)  
    
  19.           {  
    
  20.               if((xx == 0 && yy == 0)||(start.y + yy == last.y && start.x + xx == last.x))//不包括當前點  
    
  21.                   continue;  
    
  22.               //cout << HoughArea[start.y + yy][start.x + xx] << endl;  
    
  23.               if(HoughArea[start.y + yy][start.x + xx] > Max)  
    
  24.               {  
    
  25.                   Max = HoughArea[start.y + yy][start.x + xx];  
    
  26.                   temp.x = start.x + xx;  
    
  27.                   temp.y = start.y + yy;  
    
  28.               }   
    
  29.           }  
    
  30.       }  
    
  31.       if(Max > Threshold)  
    
  32.       {  
    
  33.           //cout << Max << "  ";  
    
  34.           mistakes = 0;//容錯清零  
    
  35.           cout << "find1:"<< Max << endl;  
    
  36.           Max = 0;  
    
  37.           (*line).houghpoint.push_back(temp);  
    
  38.           last = start;//保存上一次最大值  
    
  39.           start = temp;//找到的點作為當前點繼續搜索  
    
  40.           CvScalar s;      
    
  41.           s.val[0]=0;  
    
  42.           s.val[1]=255;  
    
  43.           s.val[2]=0;  
    
  44.           //cvSet2D(hough,temp.y,temp.x,s);//set the (i,j) pixel value  
    
  45.       }  
    
  46.       else if(mistakes <= 5)//容錯,三次  
    
  47.       {  
    
  48.           mistakes++;  
    
  49.           Max = 0;  
    
  50.           start.x = start.x + 1;  
    
  51.       }  
    
  52.       else//退出條件  
    
  53.           break;//沒有找到符合條件的點,退出搜索  
    
  54.   }  
    
  55.   //*******************************************************************************  
    
  56.   CvPoint final;  
    
  57.   final.x = start.x - mistakes;  
    
  58.   final.y = start.y;  
    
  59.   return final;  
    
  60. }

  61. 導入包含的庫文件

#include

#include
<opencv2/opencv.hpp>

#include

#include
<opencv2/highgui/highgui.hpp>

#include

using namespace
std;

using namespace cv;

  1. 讀取圖片

    //reading
    image
    *****

    Mat image;

    image = imread("/home/project1/test1.jpg");

    if(image.empty()){

     cout <<"reading error"<<endl;return -1;
    

}

  1. 灰度變換

//gray image****

Mat image_gray;

cvtColor(image,image_gray,
CV_BGR2GRAY);

  1. canny邊緣檢測

//canny***

Mat image_canny;

Canny(image_gau,
image_canny,100, 200, 3);

總結

以上是生活随笔為你收集整理的车道线检测算法经典编程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。