gpt4 book ai didi

从网络摄像头进行霍夫变换时,Python OpenCV 崩溃

转载 作者:太空宇宙 更新时间:2023-11-03 15:23:24 24 4
gpt4 key购买 nike

我想我已经解决了问题。我正在使用 IP 网络摄像头流,进行 canny edge 和 hough 变换。然后显示叠加变换和原始图像。所以看起来很像普通的网络摄像头,但水平线被突出显示了。我正在寻找图像中的水平线。只要其中有水平线,它就可以正常工作。如果我启动摄像头但没有任何水平线,我会收到错误消息:

 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

在第 16 行,您尝试访问 lines[0],它实际上调用了 lines.__getitem__。由于 linesNoneType 类型,因此它没有 __getitem__ 方法。

要解决这个问题,例如,您可以在访问其项目之前检查 不是 None 行:

if lines:
for line in lines[0]
[...]

(请注意,它还会检查 lines 是否为空列表)

关于从网络摄像头进行霍夫变换时,Python OpenCV 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11302648/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com