入門版的車道線檢測(python opencv)

2021-09-24 14:25:24 字數 3956 閱讀 8883

鏈結1鏈結2

這個**,我只是仿寫。不同的地方在於,能不用函式就不用。應該客觀性好點。**步驟如下。我也學著裝b,在github上存了我的完整**。還有利用這個**識別自己中車道線的例項,還有一點點解析。可以去看看,對了還有**原圖。

鏈結3

1 載入

import cv2 as cv 

import numpy as np

#讀取src = cv.imread('opencv/lanedetection/lane.jpg')

2 高斯濾波

#高斯降噪

#灰度處理

#邊緣檢測

#roi劃定區間,並將非此區間變成黑色

regin = np.array([[(0,src.shape[0]),(460,325),

(520,325),(src.shape[1],src.shape[0])]]) #為啥要兩中括號?

mask = np.zeros_like(src3)

mask_color = 255 #src3影象的通道數是1,且是灰度影象,所以顏色值在0-255

#利用霍夫變換原理找出上圖中的畫素點組成的直線,然後畫出來

rho = 1

theta = np.pi/180

threhold =15

minlength = 40

maxlengthgap = 20

lines = cv.houghlinesp(src4,rho,theta,threhold,np.array(),minlength,maxlengthgap)

#畫線linecolor =[0,255,255]

linewidth = 4

src5 = cv.cvtcolor(src4,cv.color_gray2bgr) #轉化為三通道的影象

lefts =

rights =

for line in lines:

for x1,y1,x2,y2 in line:

#cv.line(src5,(x1,y1),(x2,y2),linecolor,linewidth)

#分左右車道

k = (y2-y1)/(x2-x1)

if k<0:

else:

7 接下來有兩個函式,過濾點和得出直線方程然後得到直線兩端點位置。(這裡唯一的難點,過了就這**就懂了),本來想拆分,但是沒有看函式的輸入也很難懂,看函式結合輸入看吧。

#優化處理

def choose_lines(lines,threhold): #過濾斜率差別較大的點

slope =[(y2-y1)/(x2-x1) for line in lines for x1,x2,y1,y2 in line]

while len(lines) >0:

mean = np.mean(slope) #平均斜率

diff = [abs(s- mean) for s in slope]

idx = np.argmax(diff)

if diff[idx] > threhold:

slope.pop(idx)

lines.pop(idx)

else:

break

return lines

def clac_edgepoints(points,ymin,ymax): #可以理解成找一條線的端點

x = [p[0] for p in points ]

y = [p[1] for p in points ]

k = np.polyfit(y,x,1)

func = np.poly1d(k) #方程是y關於x的函式,因為輸入的ymin ymax。要求xmin,xmax

xmin = int(func(ymin))

xmax= int(func(ymax))

return[(xmin,ymin),(xmax,ymax)]

good_leftlines = choose_lines(lefts,0.1) #處理後的點

good_rightlines = choose_lines(rights,0.1)

leftpoints = [(x1,y1) for left in good_leftlines for x1,y1,x2,y2 in left]

leftpoints = leftpoints+[(x2,y2) for left in good_leftlines for x1,y1,x2,y2 in left]

rightpoints = [(x1,y1) for right in good_rightlines for x1,y1,x2,y2 in right]

rightpoints = rightpoints+[(x2,y2) for right in good_rightlines for x1,y1,x2,y2 in right]

lefttop = clac_edgepoints(leftpoints,325,src.shape[0]) # 要畫左右車道線的端點

#影象疊加

記得**後面加這幾句啊

cv.waitkey(0)

cv.destroyallwindows()

matlab車道線檢測 車道線檢測簡易版

第一次接觸式車道線檢測時嘗試的實現,整理上傳下 1 提取原圖邊緣,可以看出車輛前方的車道線在整個影象下方的梯形區域,提取這個roi 2 在roi區域進行輪廓查詢,按照輪廓周長和面積過濾掉干擾項,最後應該剩下兩條分布在影象中線左右兩側的兩條車道線 3 對左右兩條車道線點集做直線擬合,最後得出兩條車道線...

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

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

opencv車道線檢測

二值化 先變化為灰度圖,然後設定閾值直接變成二值化影象。形態學濾波 對二值化影象進行腐蝕,去除噪點,然後對影象進行膨脹,彌補對車道線的腐蝕。邊緣檢測 canny變化 sobel變化和laplacian變化中選擇了效果比較好的canny變化,三者在 中均可以使用,canny變化效果稍微好一點。按鍵控制...