簡體   English   中英

從網絡攝像頭進行Hough變換時,Python OpenCV崩潰了

[英]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.HoughLinesPNone 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM