91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么使用opencv實現車道線檢測

發布時間:2022-03-18 16:14:22 來源:億速云 閱讀:284 作者:iii 欄目:開發技術

這篇“怎么使用opencv實現車道線檢測”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“怎么使用opencv實現車道線檢測”文章吧。

效果

怎么使用opencv實現車道線檢測

 void lane_detection(cv::Mat &src, cv::Mat &dst)
 {
     dst = cv::Mat::zeros(src.size(),src.type());
     cv::Mat grid =cv::Mat::zeros(src.size(),src.type());
     int iStep = 25;
     int iNUmsX = src.cols / iStep;
     int inUmsY = src.rows / iStep;

     for(int i = 1; i <= inUmsY; i++)
     {
         int yPos = i * iStep + src.cols / 5;
         cv::Point2d pt1,pt2;
         int iOffset = 10;
         pt1.x = 0 + iOffset;
         pt1.y = yPos;
         pt2.x = src.cols - iOffset;
         pt2.y = yPos;
         cv::line(grid,pt1,pt2,cv::Scalar(255), 1, cv::LINE_4);
     }
     for(int i = 1; i <= iNUmsX; i++)
         int xPos = i * iStep;
         pt1.x = xPos;
         pt1.y = 0 + iOffset + src.rows / 5;
         pt2.x = xPos;
         pt2.y = src.rows - iOffset;
     cv::imshow("grid", grid);
     cv::Mat bitNot;
     cv::bitwise_and(src, grid, bitNot);
     cv::Mat add = cv::Mat::zeros(bitNot.rows, bitNot.cols,bitNot.type());
     int iDiffTh = 200;
     
     QTime timer;
     timer.start();
     //#pragma omp parallel for num_threads(10)
      for (int i = 1; i < bitNot.rows - 1; i++)
      {
          for (int j = 1; j < bitNot.cols - 1; j++)
          {
              int iValueX = (int)bitNot.at<uchar>(i, j);
              int iValueXPre = (int)bitNot.at<uchar>(i-1, j);
              int iValueXNext = (int)bitNot.at<uchar>(i+1, j);
              int iValueY = (int)bitNot.at<uchar>(i, j);
              int iValueYPre = (int)bitNot.at<uchar>(i, j-1);
              int iValueYNext = (int)bitNot.at<uchar>(i, j+1);
              if((iValueX - iValueXPre > iDiffTh && iValueX - iValueXNext > iDiffTh) ||
                  (iValueY - iValueYPre > iDiffTh && iValueY - iValueYNext > iDiffTh))
              {
                  add.at<uchar>(i, j) = 255;
              }
          }
      }
      qDebug()<<"process time: "<<timer.elapsed()<<" ms";
      //形態學預處理
      cv::Mat matDilate;
      cv::Mat k33 = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(9, 9), cv::Point(-1, -1));
      cv::morphologyEx(add, matDilate, cv::MORPH_DILATE, k33, cv::Point(-1, -1), 3);
      cv::imshow("matDilate", matDilate);
    //cv::bitwise_not(src, matDilate, matRoi);
    cv::Mat matRoi;
    cv::bitwise_and(src, matDilate, matRoi);
    cv::imshow("matRoi", matRoi);
    cv::Mat matThresh;
    cv::threshold(matRoi, matThresh, 200, 255,cv::THRESH_BINARY);
    cv::imshow("matThresh", matThresh);
    //std::vector<std::vector<cv::Point>> contours;
    //cv::findContours(matThresh,contours,)
    std::vector<std::vector<cv::Point> > contoursDefect;
    std::vector<cv::Vec4i> hierarchyDefect;
    cv::Mat canves;
    cv::cvtColor(src, canves,cv::COLOR_RGBA2RGB);
    cv::findContours(matThresh, contoursDefect, hierarchyDefect, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_NONE);
    for (size_t i = 0; i < contoursDefect.size(); i++)
    {
     cv::Mat contour(contoursDefect.at(i));//第i個輪廓
     double area = contourArea(contour);
     if (area >=  50)
         cv::Moments moment;//矩
         moment = moments(contour, false);
         cv::Point2d pt1;
         double m00 = moment.m00 + 0.01;
         pt1.x = moment.m10 / m00;//計算重心橫坐標
         pt1.y = moment.m01 / m00;//計算重心縱坐標
         cv::drawContours(canves, contoursDefect, i, cv::Scalar(255, 255, 0), -1);
    }
    cv::imshow("canves", canves);
    cv::waitKey(0);
 }
 void test_lane_detection()
     int i = 0;
     while(1)
         cv::Mat src;
         QString  dir("D:\\QtProject\\Opencv_Example\\gen_grid_region\\scene_");
         QString path;
         if(i>9)  path =  QString("%1%2%3").arg(dir).arg(i++).arg(".png");
         else path = QString("%1%2%3%4").arg(dir).arg("0").arg(i++).arg(".png");
         cout<<path.toStdString();
         src = cv::imread(path.toStdString(), cv::IMREAD_GRAYSCALE);
         if (src.empty()) {
             cout << "Cannot load image" << endl;
             return;
         }
         cv::imshow("src", src);
         cv::Mat dst;
         lane_detection(src, dst);

以上就是關于“怎么使用opencv實現車道線檢測”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

辽阳市| 教育| 河北省| 铁岭市| 呼伦贝尔市| 城口县| 上饶县| 河东区| 榕江县| 太原市| 奉节县| 天峻县| 绥芬河市| 盐池县| 西乌珠穆沁旗| 大悟县| 什邡市| 昂仁县| 米泉市| 黄骅市| 锡林浩特市| 广昌县| 永定县| 阿拉善右旗| 上高县| 闽侯县| 繁昌县| 湾仔区| 喜德县| 济源市| 柳河县| 宁城县| 星座| 荣昌县| 绍兴市| 藁城市| 彰化市| 安义县| 湄潭县| 旅游| 双鸭山市|