【问题标题】:How to fix OpenCV Numpy Error, object is not iterable如何修复 OpenCV Numpy 错误,对象不可迭代
【发布时间】:2019-08-16 07:10:48
【问题描述】:

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

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

我已经尝试了添加的选项,

" for c in cnt or []: " - 这让我可以进一步运行应用程序,在那里我可以看到摄像头屏幕,但是一旦检测到运动,应用程序就会崩溃并提供以下 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

预期的输出,如果你有一个网络摄像头; 当检测到运动时,一个绿色矩形将跟随运动像素,并实时将模式从 Unoccupied 更改为 Occupied;没有错误。

【问题讨论】:

  • 你使用的是什么版本的 OpenCV?
  • @AlexanderReynolds 我正在使用 opencv-python==4.0.0.21

标签: python opencv typeerror nonetype


【解决方案1】:

在 Opencv4.0 中,findContour() 仅返回 2 个值,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].

【讨论】:

  • 非常感谢@Ha Bom,您的回答解决了我的问题!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-29
  • 2021-12-05
  • 1970-01-01
  • 1970-01-01
  • 2018-09-29
相关资源
最近更新 更多