我正在遵循开发运动检测安全提要的指南,但遇到了问题。教程的作者没有问题,但我有。
'''完整的代码可以在这里找到: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
预期的输出(如果有网络摄像头); 当检测到运动时,绿色矩形将跟随运动的像素,并实时将模式从“未占用”更改为“已占用”;没有错误。
答案 0 :(得分:1)
在Opencv4.0中,findContour()
仅返回两个值,contours
和hierachy
。因此,在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]
。