如何修复OpenCV Numpy错误,对象不可迭代

时间:2019-03-25 23:59:54

标签: python opencv typeerror nonetype

我正在遵循开发运动检测安全提要的指南,但遇到了问题。教程的作者没有问题,但我有。

'''完整的代码可以在这里找到:https://github.com/ncorbuk/Python-Motion-Detection-system/blob/master/motion_detection.py '''

我已经尝试过添加选项,

”(在cnt或[]中为c):“-这使我进一步运行了可以看到摄像机屏幕的应用程序,但是,一旦检测到运动,应用程序就会崩溃并提供以下numpy错误:

  

具有多个元素的数组的真值是不明确的。   使用a.any()或a.all()

for c in cnt:
        if (cv2.contourArea(c) > 800): 
            (x, y, w, h) = cv2.boundingRect(c)

            cv2.rectangle(frame, (x,y), (x+w, y+h), (0, 255, 0), 2) 

            text = 'Occupied'

        else:
            pass

预期的输出(如果有网络摄像头); 当检测到运动时,绿色矩形将跟随运动的像素,并实时将模式从“未占用”更改为“已占用”;没有错误。

1 个答案:

答案 0 :(得分:1)

在Opencv4.0中,findContour()仅返回两个值,contourshierachy。因此,在motion_detection.py的第57行中,您必须更改

cnt = cv2.findContours(dilate_image.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[1]

cnt = cv2.findContours(dilate_image.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[0]