2017-02-23 73 views
0

我想在Python中使用opencv庫在車道檢測上運行代碼。但是,我得到一個numpy.ndarray錯誤:OpenCV - 車道檢測'numpy.ndarray'錯誤

TypeError: 'numpy.ndarray' object is not callable 
File "lane_detect.py", line 10, in <module> 
    line(img,(x1,y1),(x2,y2),(0,255,0),2) 

這裏是我試圖運行的代碼:

from cv2 import * 
from numpy import * 
from matplotlib import pyplot as plt 

img = imread("Lane1.png", 0) 
edges = Canny(img,100,200) 
lines = HoughLinesP(edges,1,pi/180,100,minLineLength=100,maxLineGap=10) 
for line in lines: 
    x1,y1,x2,y2 = line[0] 
    line(img,(x1,y1),(x2,y2),(0,255,0),2) 

'''for line in lines: 
    for ex in line: 
    print ex''' 
imwrite('Lane1.png', img) 
namedWindow("Image", WINDOW_AUTOSIZE) 
namedWindow("Canny", WINDOW_AUTOSIZE) 
imshow("Canny", edges) 
imshow("Image", img) 
waitKey(0) 
destroyAllWindows() 

有可能是代碼中的其他錯誤。

請在代碼中提出一些更改。

+0

你想用'line(img,(x1,y1),(x2,y2),(0,255,0),2)'來實現什麼? – languitar

+0

如果您想了解houghlines,可以參考openCV文檔。我正在嘗試構建一個houghline。 –

+0

你是否能夠識別圖像中的車道? –

回答

2

我想你是誤解了那裏發生的事情。 lines是檢測到的霍夫線列表。你沒有構造它們,但是它們被算法檢測到。我想在循環中你試圖把它們繪製到圖像上,但是在這裏發生名稱衝突。 for循環中的line變量會覆蓋您可能想要用於繪製線條的cv2.line函數。所以要麼選擇一個不同的變量名稱,要麼調用cv2.line進行繪製。

+0

我看到你已經找到了同樣的解決方案,以及:D –

+0

完美的例子,由於lazines在腳下射擊自己(鍵入'cv2.')。 :d –

0

在你的代碼替換10號線:

cv2.line(img,(x1,y1),(x2,y2),(0,255,0),2) 

你想吸引你已經使用HoughLinesP()發現了線。因此cv2.line()爲你做。你可能在編碼時忽略了它