[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色彩空間,每列分別是原始圖-直方圖-單通道圖像。
考慮到場景中的藍色天空和綠色植被等對與車道檢測無關,而這兩個主要在藍色和綠色通道中。黃色則分布在綠色和紅色通道,白色是全通道的。考慮到只需要提取黃色和白色信息,可以提取紅色通道然後進行處理,見上圖的第一行最有一列。然後進行合適的閾值化操作,來提取車道。但是這這樣還是有點問題,就是路面較亮的話,會對提取造成干擾。
上篇補充部分用到了 HSV 色彩空間中的顏色選擇,這裡同樣嘗試使用該方法,分別對 H、S、V通道進行合適的選擇,經過實驗發現:對 V 通道進行合適的選擇後,可以很好滴提取出來黃色和白色車道,如下圖所示。
經過測試,針對上述圖片,選擇的 HSV 範圍是:
lower_hsv = [0, 0, 230]upper_hsv = [180, 250, 250]
使用 顏色選擇函數,獲取選擇的顏色範圍內像素的掩模:
mask = cv2.inRange(hsv, lower_hsv, upper_hsv)
對掩模進行形態學濾波,查找並篩選邊緣,得到結果:
完結,手動撒花。。。
參考:
https://github.com/naokishibuya/car-finding-lane-lines
推薦閱讀: