[171105] 基於 Python OpenCV 圖像處理的車道線檢測

原創內容,禁止轉載!


導讀:這是 Python OpenCV 圖像處理 專欄的第5篇文章,主要介紹了使用 Python OpenCV 圖像處理進行車道的思想、方法。關於 Python OpenCV 處理的基礎知識,可以參考這篇文章 [171102] Python3 OpenCV3 圖像處理基礎(Python3 + Numpy + Matplotlib + OpenCV3 + ...)。更多文章,請查看 [171101] Python OpenCV 圖像處理專欄目錄。


這是 Python OpenCV 圖像處理專欄 第六篇正文。 上一篇介紹了 基於 Python OpenCV 圖像處理的細胞計數,主要用到的是圖像濾波、二值化、形態學處理、查找邊緣並篩選等計數,得到「細胞」的圖像。後來又提了一下使用 HSV 空間中 色彩範圍(inRange) 來選擇合適的圖像區域,作為提取到的「細胞」圖像。本篇將要探索的時 基於 Python OpenCV 圖像處理的車道線檢測 方法。前方低能預警,非戰鬥人員可以撤離了。

與上篇補充說明中類似,這篇也要用到HSV色彩空間顏色選區。同時也要用到邊緣檢測、查找輪廓、霍夫變換等技術。相關技術詳細細節請自行搜索,本文不提供「細節」

通常行車記錄儀拍攝到的視頻中,車道線白色和黃色直線(段),路面是灰色的水泥路或深色的瀝青路,路旁是綠色的樹木等植物,遠方則是藍色或灰色的天空。如果直接使用灰度閾值化,則不太合適。因為雖然車道線比較亮,但是天空同樣也比較亮。

將原始的 BGR 圖像變換到 HSV 和 LAB 等色彩空間,分離通道並查看各個通道信息。如圖所示,每行分別是BGR-HSV-LAB色彩空間,每列分別是原始圖-直方圖-單通道圖像。

每行分別是BGR-HSV-LAB色彩空間,每列分別是原始圖-直方圖-單通道圖像

考慮到場景中的藍色天空和綠色植被等對與車道檢測無關,而這兩個主要在藍色和綠色通道中。黃色則分布在綠色和紅色通道,白色是全通道的。考慮到只需要提取黃色和白色信息,可以提取紅色通道然後進行處理,見上圖的第一行最有一列。然後進行合適的閾值化操作,來提取車道。但是這這樣還是有點問題,就是路面較亮的話,會對提取造成干擾。

上篇補充部分用到了 HSV 色彩空間中的顏色選擇,這裡同樣嘗試使用該方法,分別對 H、S、V通道進行合適的選擇,經過實驗發現:對 V 通道進行合適的選擇後,可以很好滴提取出來黃色和白色車道,如下圖所示。

更改H通道,效果不好

更改V通道,可以提取黃色車道,但是白色車道無法提取

更改V通道,提取出了黃色和白色車道

經過測試,針對上述圖片,選擇的 HSV 範圍是:

lower_hsv = [0, 0, 230]upper_hsv = [180, 250, 250]

使用 顏色選擇函數,獲取選擇的顏色範圍內像素的掩模:

mask = cv2.inRange(hsv, lower_hsv, upper_hsv)

對掩模進行形態學濾波,查找並篩選邊緣,得到結果:

Python OpenCV 車道線檢測

完結,手動撒花。。。

參考:

https://github.com/naokishibuya/car-finding-lane-lines

推薦閱讀:

1.12【OpenCV圖像處理】提取水平、垂直線與驗證碼

TAG:OpenCV | 图像处理 | 计算机视觉 |