[英]Python OpenCV crashes when doing a Hough transform from webcam
我想我已經找到了問題所在。 我正在使用IP網絡攝像頭流,做一個精明的邊緣和霍夫變換。 然后顯示重疊變換和原始圖像。 所以幾乎看起來像普通的網絡攝像頭,但水平線突出顯示。 而我正在尋找圖像中的水平線條。 只要其中有水平線,它就可以正常工作。 如果我啟動凸輪並且沒有任何水平線,我會收到錯誤:
Traceback (most recent call last):
File "/home/Desktop/hough.py", line 16, in <module>
for line in lines[0]:
TypeError: 'NoneType' object has no attribute '__getitem__'
這是整個代碼。 我是python和opencv的新手,所以我不知道如何解決這個問題。 我想它只是在沒有任何水平線時顯示空白圖像,所以我可以有一個連續的流。
我的下一個任務是嘗試將圖像保存到視頻中。 對此部分的任何幫助將不勝感激。 謝謝!
import cv2
import urllib
import math
cv2.namedWindow('edge')
while True:
urllib.urlretrieve("http://192.168.5.1:8080/shot.jpg", 'cam.jpg')
img = cv2.imread('cam.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray, 80, 120, apertureSize=3)
lines = cv2.HoughLinesP(edges, 1, math.pi/2, 2, None, 30, 1)
for line in lines[0]:
pt1 = (line[0],line[1])
pt2 = (line[2],line[3])
cv2.line(img, pt1, pt2, (0,0,255), 3)
cv2.imwrite("road2.jpg", img)
cv2.imshow('edge', img)
ch = cv2.waitKey(5)
if ch == 27:
break
顯然cv2.HoughLinesP
在None
cv2.HoughLinesP
返回None
。
在第16行,您嘗試訪問lines[0]
,它實際上調用lines.__getitem__
。 由於lines
的類型為NoneType
,因此它沒有__getitem__
方法。
要解決此問題,您可以在訪問其項目之前檢查行is not None
:
if lines:
for line in lines[0]
[...]
(請注意,它還會檢查行不是空列表)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.