Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python类型错误:';非类型';对象没有属性'__获取项目';_Python_Typeerror_Nonetype - Fatal编程技术网

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

这一次,我正在尝试另一个例子。它是一个模块,使用霍夫变换检测图像中的直线和圆。 下面是代码(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' 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