鏈結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變化效果稍微好一點。按鍵控制...