Как исправить ошибку OpenCV Numpy, объект не повторяется - PullRequest
0 голосов
/ 26 марта 2019

Я следую руководству по разработке системы безопасности при обнаружении движения и столкнулся с проблемой. У автора учебника проблем не было, а у меня.

'' 'Полный код можно найти здесь: https://github.com/ncorbuk/Python-Motion-Detection-system/blob/master/motion_detection.py '' '

Я уже пробовал добавить,

"для c в cnt или []:" - это еще больше подтолкнуло меня к запуску приложения, где я мог видеть экраны камеры, однако, как только обнаружилось движение, приложение вылетает и выдает следующую ошибку:

Значение истинности массива с более чем одним элементом неоднозначно. Используйте 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 Ответ

1 голос
/ 26 марта 2019

В Opencv4.0 findContour() возвращает только 2 значения, contours и hierachy.Таким образом, в строке 57 в motion_detection.py вы должны изменить

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].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...