opencv車道線檢測

2021-08-21 04:17:36 字數 3592 閱讀 8396

二值化:先變化為灰度圖,然後設定閾值直接變成二值化影象。

形態學濾波:對二值化影象進行腐蝕,去除噪點,然後對影象進行膨脹,彌補對車道線的腐蝕。

邊緣檢測:canny變化、sobel變化和laplacian變化中選擇了效果比較好的canny變化,三者在**中均可以使用,canny變化效果稍微好一點。

按鍵控制:空格暫停,其餘鍵退出,方便除錯和截圖。

在亮度良好道路條件良好的情況下,檢測車前區域的車道線實現比較成功,排除掉高速護欄的影響,而且原影象還能完整體現。

實現的功能:實現了車道線檢測的基本功能,反透視變換矩陣實現了但效果不太理想,使用自己寫的直線檢測部分,車道線識別抗干擾能力較強。

缺點:整個識別系統都是固定的引數,只能在特定的環境產生良好的效果。

改進空間:提取全部關鍵引數,每次對roi影象進行快速掃瞄更新引數,否則使用預設引數。例如,可以選擇每次5間隔取點,以畫素最高點的85%作為該次二值化的閾值。從而做到動態車道線識別。

方法一 

main.cpp

#include

#include

#include

#include"mylinedetect.h"

#include

#include

using

namespace

std;

int main()

while (pframe = cvqueryframe(pcapture))

else

#pragma endregion

#else

#pragma region mylinedetect

mat edge(pcutfrimg);

vector

lines = detectline(edge, 60);

mat pframemat(pframe);

drawlines(pframemat, lines);

namedwindow("mylinedetect", 1);

imshow("mylinedetect", pframemat);

#pragma endregion

#endif

//恢復roi區域

cvresetimageroi(pframe);

writer << pframe;

//顯示影象

cvshowimage("video", pframe);

cvshowimage("bwmode", pcutfrimg);

//按鍵事件,空格暫停,其他跳出迴圈

int temp = cvwaitkey(2);

if (temp == 32)

else

if (temp >= 0)}}

//銷毀視窗

cvdestroywindow("video");

cvdestroywindow("bwmode");

//釋放影象

cvreleaseimage(&pcutfrimg);

cvreleaseimage(&pcutframe);

cvreleasecapture(&pcapture);

return

0;}

#include "opencv2/imgproc/imgproc.hpp"

#include "opencv2/highgui/highgui.hpp"

#include

#include

#include

using

namespace cv;

using

namespace

std;

const

double pi = 3.1415926f;

const

double radian = 180.0 / pi;

struct line;

vector

detectline(mat &img, int threshold)}}

}//獲得最大值

for (int theta = 0; theta < 360; theta++)}}

return lines;

}void drawlines(mat &img, const

vector

&lines)

//計算右邊

y = int((r - ct*(img.cols - 1)) / st);

if (y >= 0 && y < img.rows)

//計算上邊

int x = int(r / ct);

if (x >= 0 && x < img.cols)

//計算下邊

x = int((r - st*(img.rows - 1)) / ct);

if (x >= 0 && x < img.cols)

//畫線

cv::line(img, points[0], points[1], scalar(255, 0, 0), 5, cv_aa);}}

#include

#include

#include

#include

#include

using

namespace

std;

int main()

while (pframe = cvqueryframe(pcapture))

else

#pragma endregion

//顯示影象

cvshowimage("video", pcutframe);

cvshowimage("background", pcutbkimg);

cvshowimage("foreground", pcutfrimg);

//按鍵事件,空格暫停,其他跳出迴圈

int temp = cvwaitkey(2);

if (temp == 32)

else

if (temp >= 0)

}//恢復roi區域(多餘可去掉)

cvresetimageroi(pframe);

}//銷毀視窗

cvdestroywindow("video");

cvdestroywindow("background");

cvdestroywindow("foreground");

//釋放影象和矩陣

cvreleaseimage(&pcutfrimg);

cvreleaseimage(&pcutbkimg);

cvreleaseimage(&pcutframe);

cvreleasemat(&pcutframemat);

cvreleasemat(&pcutfrmat);

cvreleasemat(&pcutbkmat);

cvreleasecapture(&pcapture);

return

0;}

使用OpenCV實現車道線檢測

計算機視覺在自動化系統觀測環境 該系統控制器輸入值等方面起著至關重要的作用。本文介紹了使用計算機視覺技術進行車道檢測的過程,並引導我們完成識別車道區域 計算道路roc和估計車道中心距離的步驟。幾乎所有攝像機使用的鏡頭在聚焦光線以捕捉影象時都存在一定的誤差,因為這些光線由於折射 在鏡頭邊緣發生了彎曲。...

無人駕駛 OpenCV車道線檢測

opencv車道線檢測 輸入 一張攝像機拍攝到的道路,中需要包含車道線。如下圖所示 可 可以直接將另存成jpg格式來使用 輸出 影象座標系下的左右車道線的直線方程和有效距離。將左右車道線的方程繪製到原始影象上,應如下圖所示。原始影象 認識影象前,我們需要先回顧一下在初中所學的物理知識 光的三原色,光...

車道線檢測之3D車道線檢測

可參考文獻 有相機座標系ccamera和道路座標系croad,作者假定兩個座標系的roll和yaw一致,僅存pitch的差異,那麼,兩座標係之間的轉換關係tc2r將由h cam和camera pitch確定,其中,h cam和camera pitch由模型 輸入為相機採集的影象,輸出分為2部分,第一...