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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > windows >内容正文

windows

基于OpenCV的车道偏离预警系统

發(fā)布時(shí)間:2024/3/12 windows 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于OpenCV的车道偏离预警系统 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

車道偏離預(yù)警

開發(fā)環(huán)境

Ubuntu 16.04

OpenCV

C++

車道偏離預(yù)警概念解釋

車道偏離預(yù)警系統(tǒng),其英文全稱為L(zhǎng)ane Departure Warning System,因此很多車型上都將車道偏離預(yù)警系統(tǒng)簡(jiǎn)稱為L(zhǎng)DW系統(tǒng)。其主要功能是通過車輛上的傳感器、控制器等部件,在車輛發(fā)生無(wú)意識(shí)偏離車道時(shí)通過聲音、閃光和振動(dòng)等方式提醒駕駛員。

這篇文章使用OpenCV傳統(tǒng)的圖像處理方式,實(shí)現(xiàn)車道檢測(cè)以及偏離報(bào)警的功能。幫助大家快速入門圖像處理以及OpenCV。

環(huán)境搭建

Linux下安裝OpenCV有兩種方式:編譯源碼和直接安裝二進(jìn)制文件。

編譯源碼時(shí)間長(zhǎng)、對(duì)環(huán)境要求比較高,編譯的過程中容易出錯(cuò)。最簡(jiǎn)單的方式是使用 apt-get 安裝。

apt-get update apt-get install libcv-dev libopencv-photo-dev libopencv-contrib-dev

一個(gè)測(cè)試程序:

#include <opencv2/core/core.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <opencv2/highgui/highgui.hpp> #include <iostream>using namespace cv; using namespace std;int main (int argc, char **argv) {Mat image, image_gray;image = imread(argv[1], CV_LOAD_IMAGE_COLOR );if (argc != 2 || !image.data) {cout << "No image data\n";return -1;}cvtColor(image, image_gray, CV_RGB2GRAY);namedWindow("image", CV_WINDOW_AUTOSIZE);namedWindow("image gray", CV_WINDOW_AUTOSIZE);imshow("image", image);imshow("image gray", image_gray);waitKey(0);return 0; }

編譯:

g++ test.cpp -o test -lopencv_core -lopencv_imgproc -lopencv_highgui

運(yùn)行的時(shí)候加上一張圖片,可以把彩色圖片處理成黑白圖片,比如:

./test test.jpg

車道檢測(cè)涉及的圖像處理技術(shù)

1、讀取攝像頭或者視頻數(shù)據(jù)

OpenCV讀取視頻數(shù)據(jù)非常簡(jiǎn)單,如果不做過多的參數(shù)設(shè)置(幀率、分辨率),只需要調(diào)用 VideoCapture 類中的 read 函數(shù)即可。

VideoCapture cap; Mat mFrame;cap.open(VIDEO_FILE_NAME);while (cap.read(mFrame)) {imshow("mytest", mFrame);waitKey(10); }

imshow()函數(shù)實(shí)現(xiàn)在屏幕中顯示一張圖片的功能。

waitKey()函數(shù)用于等待,單位為毫秒。

如果是讀取攝像頭數(shù)據(jù),把 open 的參數(shù)改成 0,如果是USB攝像頭,把參數(shù)改成 1 。

2、截取圖像

從測(cè)試視頻中讀取的數(shù)據(jù)有一大半都是不需要的,我們需要的是地上的車道線。所以對(duì)于截取的圖片可以先把上面一半裁掉。

在OpenCV中使用 Rect 函數(shù)。

mFrame(Rect(0, mFrame.rows / 2, mFrame.cols, mFrame.rows / 2));

四個(gè)參數(shù)的含義分別為:從(0, mFrame.rows / 2)坐標(biāo)開始,向右 mFrame.cols 個(gè)像素,向下 mFrame.rows / 2 個(gè)像素。


3、轉(zhuǎn)換成灰度像

自然界中的色彩很容易受到光照的影響,而且彩色的圖片數(shù)據(jù)量非常大, 不利于后期的圖像處理。所以把圖像轉(zhuǎn)換成灰度圖,后續(xù)處理的計(jì)算量會(huì)更少。

OpenCV中使用 cvtColor 函數(shù)。

cvtColor(imageROI, mGray, COLOR_BGR2GRAY);

三個(gè)參數(shù)的含義:輸入圖像、輸出圖像、轉(zhuǎn)換成灰度圖。


4、高斯濾波

灰度圖中有很多模糊或者可能對(duì)后期處理造成影響的像素點(diǎn)(稱之為“噪聲”),通過高斯濾波把它過濾掉。

OpenCV中使用 GaussianBlur 函數(shù)。

GaussianBlur(mGray, IPM_Gray, Size(7, 7), 1.5, 1.5);

各個(gè)參數(shù)的意義:輸入的圖像、輸出圖像、高斯內(nèi)核的大小(size.width和size.height)、高斯核函數(shù)在X方向的的標(biāo)準(zhǔn)偏差、高斯核函數(shù)在Y方向的的標(biāo)準(zhǔn)偏差。

注:如果需要詳細(xì)了解后面三個(gè)參數(shù)的意義,可以百度「高斯濾波」;如果純粹是為了寫代碼,沒有必要。


5、邊緣檢測(cè)

比較著名的邊緣檢測(cè)算法是Canny,根據(jù)像素點(diǎn)周邊的像素情況計(jì)算出梯度值和方向來(lái)確定真實(shí)和潛在的邊緣。

OpenCV中使用 Canny 函數(shù)。

Canny(IPM_Gray, IPM_Gray, 80, 100, 3);

各個(gè)參數(shù)的含義:輸入圖像、輸出圖像、最低閾值、最高閾值、Sobel內(nèi)核大小(內(nèi)部使用)。

6、霍夫變換

霍夫變換是用來(lái)辨別找出圖像中的特征,例如:線條。線條由兩個(gè)點(diǎn)組成,每個(gè)點(diǎn)包含橫坐標(biāo)和縱坐標(biāo),即一條線段由四個(gè)數(shù)據(jù)組成。在OpenCV中用 Vec4i 來(lái)表示線段,可以理解成是一個(gè)數(shù)組,數(shù)組里面包含了四個(gè)元素。

vector<Vec4i> lines; HoughLinesP(IPM_Gray, lines, 1, CV_PI / 180, 10, 20, 50);

各個(gè)參數(shù)的含義:輸入圖像、檢測(cè)到的所有線段、半徑分辨率、角度分辨率、線段長(zhǎng)度閾值、線段上最近兩點(diǎn)之間的閾值。

7、車道偏離檢測(cè)算法

車道偏離檢測(cè)算法有很多,講解一種比較簡(jiǎn)單的判斷方法。


通過數(shù)學(xué)運(yùn)算,可以得到兩條車道線和 X 軸的交點(diǎn),分別是 left_x 和 right_x ,如果 left_x 和 right_x 在某個(gè)范圍內(nèi),則認(rèn)為正常行駛;如果 left_x 和 right_x 向左移動(dòng),則認(rèn)為是右轉(zhuǎn),否則就是左轉(zhuǎn)。

8、畫出車道

檢測(cè)出車道后使用 OpenCV 畫直線的 line 函數(shù)畫出車道。

line(mFrame, Point(right_lane[0], right_lane[1] + mFrame.rows * 2 / 3), Point(right_lane[2], right_lane[3] + mFrame.rows * 2 / 3), Scalar(0, 255, 0), 3);

各個(gè)參數(shù)的含義:輸入圖像、直線的起點(diǎn)、直線的終點(diǎn)、顏色、線條寬度。


8、報(bào)警

報(bào)警方式很多,代碼中使用了文字的方式作出提醒。OpenCV編輯文字使用 putText 函數(shù)。

putText(mFrame, "right", Point(450, 200), cv::FONT_HERSHEY_PLAIN,4, cv::Scalar(0, 0, 255), 5);

各個(gè)參數(shù)的含義:輸入圖像、文字、文字左下角坐標(biāo)、字體、字體大小、字體顏色、字體線條寬度

關(guān)注公眾號(hào) 學(xué)益得智能硬件

后臺(tái)回復(fù) 車道檢測(cè) 獲取源碼

總結(jié)

以上是生活随笔為你收集整理的基于OpenCV的车道偏离预警系统的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。