python类型错误:';非类型';对象没有属性'__获取项目';
这一次,我正在尝试另一个例子。它是一个模块,使用霍夫变换检测图像中的直线和圆。 下面是代码(houghlines.py): 当我通过以下方式在python中执行文件时:python类型错误:';非类型';对象没有属性'__获取项目';,python,typeerror,nonetype,Python,Typeerror,Nonetype,这一次,我正在尝试另一个例子。它是一个模块,使用霍夫变换检测图像中的直线和圆。 下面是代码(houghlines.py): 当我通过以下方式在python中执行文件时: execfile('houghlines.py') 出现以下错误: File "houghlines.py", line 24, in <module> lines = cv2.HoughLines(edges, 2, np.pi/90, 40)[0] TypeError: 'NoneType' objec
execfile('houghlines.py')
出现以下错误:
File "houghlines.py", line 24, in <module>
lines = cv2.HoughLines(edges, 2, np.pi/90, 40)[0]
TypeError: 'NoneType' object has no attribute '__getitem__'
文件“houghlines.py”,第24行,在
线=cv2.霍夫线(边,2,np.pi/90,40)[0]
TypeError:“非类型”对象没有属性“\uuuu getitem\uuuu”
你们知道怎么解决吗提前感谢。有时HoughLines和HoughLinesP不返回任何值。我认为这意味着“没有台词”。文档中的示例没有说明这一点,这让我感到非常惊讶。也许是个虫子
在任何情况下,您都可以通过一个简单的
if result!=无:
或将无替换为默认列表,如(HoughLinesP(…args…)或[[])
。这无法修复未检测到您的行的事实,但它允许您在这种情况下执行某些操作,而不是失败。我也在处理此错误。当函数cv2.HoughCircles
未检测到任何圆时,它将返回None。所以我有两种解决方法,如下所示:
- 使用try/exception包围代码块
试试看:
...
例外情况除外,如e:
打印“没有要检测的圆!”
- 使用if/else避免操作任何对象
如果圆不是无:
...
其他:
打印“没有要检测的圆!”
这是因为line=cv2.HoughLines(edges,2,np.pi/90,40)[0]中的阈值,这是您传递的最后一个参数。它表示一条线的最小长度,在您的情况下为40像素。试着减少它。我用这段代码克服了这个问题:
lines = []
linesDetected = False
while not linesDetected:
lines = cv.HoughLinesP(edges, 1, np.pi/180, 30, minLineLength = 60, maxLineGap=300)
try:
if len(lines) !=0:
linesDetected = True
except:
linesDetected = False
将使用更改阈值
canny=cv2.canny(灰色,50150,光圈尺寸=3)
lines=cv2.HoughLines(canny,1,numpy.pi/180,40)
打印(行)Houghlines
函数返回None
@segfolt:是的,但似乎并不表示这是正常行为..嗯-如果尝试cv2.Houghlines(edges,2,np.pi/90,40,None)
,会发生什么?如果我尝试您的解决方案,错误会“移动”到另一行。这一次是:文件“houghlines.py”,第25行,plines=cv2.HoughLinesP(edges,1,np.pi/180,20,np.array([]),10)[0]类型错误:“NoneType”对象没有属性“getitem”,这意味着现在HoughLinesP不会返回任何属性。如果您不确定cv2函数的输出,请尝试在输入“空”图像时发生的情况,其中一个图像肯定不包含任何行。我不会将其称为错误,而只是缺少一个check语句。我刚刚检查了git回购协议中Hough行的cpp
等效示例,有一个检查。(在C++中)在堆栈上初始化线向量,并将其传递给Hough line函数。然后检查是否包含任何内容。我将提交一个问题和一个补丁。一个小问题:如果结果不是None:
比如果结果更像Pythonic!=无:
。
lines = []
linesDetected = False
while not linesDetected:
lines = cv.HoughLinesP(edges, 1, np.pi/180, 30, minLineLength = 60, maxLineGap=300)
try:
if len(lines) !=0:
linesDetected = True
except:
linesDetected = False