opencv 边缘平滑_基于OpenCV的车道检测实现(一)
無人駕駛的話題日趨起熱,而車道線檢測對于無人駕駛的路徑規劃來講特別重要。要遵守交通規則,首先的要求便是對車道線檢測,而且通過檢測車道線可以進一步的檢測地面指示標志、進行前碰撞預警策略設計等。
早早就對OpenCV感興趣,但遲遲未去實踐,現在我們就一起看看如何基于OpenCV進行檢測吧!
步驟:
1、Canny邊緣檢測算法的實現
2、OPENCV ROI(感興趣區域替換)
3、霍夫變換
4、離群值過濾
5、最小二乘擬合
6、直線繪制與整合
1、canny邊緣檢測算法
Opencv中的幾種邊緣檢測算法_人工智能_k-CSDN博客?blog.csdn.net首先,Canny 邊緣檢測是一種非常流行的邊緣檢測算法。忘記講了,前面需要將圖片灰度化,這樣使得圖片更好處理。
原圖:
灰度之后:
img=cv2.imread('img.jpg',cv2.IMREAD_GRAYSCALE)接著進行邊緣檢測:
edge_img=cv2.Canny(img,100,150)Canny邊緣檢測算法:
step1:用高斯濾波器平滑圖象;
step2:用一階偏導的有限差分來計算梯度的幅值和方向;
step3:對梯度幅值進行非極大值抑制;
step4:用雙閾值算法檢測和連接邊緣。
Canny(名稱,下閾值,上閾值)
主要利用梯度來看是否為邊緣,上閾值以上的保留,下閾值以下的消去,中間的若與上閾值相連的則可留下,這樣則可消去大量噪點。
2、roi去除背景
opencv ROI(感興趣區域替換)?www.cnblogs.com首先,要考慮原圖以什么形式保存,這里采用的是利用掩碼,產生一塊對應的畫布,進行替代。
mask=np.zeros_like(edge_img) mask=cv2.fillPoly(mask,np.array([[[20,488],[700,100],[130,200],[120,200]]]),color=255) masked_edge_img=cv2.bitwise_and(edge_img,mask)這里則需要確定畫布的四個點的位置,color=255為黑色。
3、霍夫變換
霍夫變換?www.cnblogs.com在直角坐標系中,我們可以通過繪制 y 對 x 的圖像來表示 y=mx+b。但在霍夫空間中,我們也可以通過繪制 b 對 m 的圖像將這條線表示為一個點,即用極坐標方程。
例如,直線方程 y=2x+1 在霍夫空間中可能是用 (2, 1) 表示的。
例如,對極坐標系中的點 (8, 6)、(4, 9) 和 (12, 3),我們在霍夫空間中繪制出的相應圖像如下:
在霍夫空間中相交的曲線越多,意味著用交點表示的線對應的點越多。如此,我們便可在霍夫空間中定義了交點的最小閾值,以便檢測車道線,消去無用的線。如果交點數量超過了定義的閾值,我們就確定一條對應參數 θ 和 r 的線。
left_lines=[line for line in lines if calculate_slope(line)>0] right_lines=[line for line in lines if calculate_slope(line)<0] def reject_abnormal_lines(lines,threshold):slopes=[calculate_slope(line) for line in lines]while len(lines)>0:mean=np.mean(slopes)diff=[abs(s-mean) for s in slopes]idx=np.argmax(diff)if diff[idx]>threshold:slopes.pop(idx)lines.pop(idx)else:breakreturn lines reject_abnormal_lines(left_lines,threshold=0.002)通過以上三步,我們便可初步將車道線的位置確定下來。歡迎大家一起來嘗試!
總結
以上是生活随笔為你收集整理的opencv 边缘平滑_基于OpenCV的车道检测实现(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: git如何拉去开发的 最新代码_linu
- 下一篇: linux安装python3.6 set