OpenCV (-215: утверждение не выполнено)! _Sr c .empty () в функции 'cvtColor - PullRequest
0 голосов
/ 05 марта 2020

Итак, в основном я пишу программу в Google Colab, которая будет распознавать лица через веб-камеру, используя python и opencv2. «У меня Ubuntu 19.10, если это поможет»

import cv2
faceCascade = cv2.CascadeClassifier("haarcascade_frontalface_default.xml")

video_capture = cv2.VideoCapture(0)

while True:
  ret, frame = video_capture.read()

  gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

На этом этапе появляется ошибка подтверждения

Traceback (most recent call last)
<ipython-input-94-ca2ba51b9064> in <module>()
      7   ret, frame = video_capture.read()
      8 
----> 9   gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

error: OpenCV(4.1.2) /io/opencv/modules/imgproc/src/color.cpp:182: error: (-215:Assertion failed) !_src.empty() in function 'cvtColor'

Ничто не использует веб-камеру, пока я запускаю этот код

Ответы [ 2 ]

1 голос
/ 05 марта 2020

!_src.empty() означает, что у вас пусто frame.

Когда cv2 не может получить frame с камеры / файла / потока, тогда не отображается ошибка, но устанавливается None в frame и False в ret - и Вы должны проверить одно из этих значений

if frame is not None: 
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    # ... other code ...
else:
    print("empty frame")
    exit(1)

или

if ret:  # if ret is True:
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    # ... other code ...
else:
    print("empty frame")
    exit(1)

или

if not ret: 
    print("empty frame")
    exit(1)

gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# ... other code ...

или

if frame is None: 
    print("empty frame")
    exit(1)

gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# ... other code ...

Кстати: вы не может использовать более короткий if frame:, потому что когда он получает изображение с камеры, тогда frame получает numpy.array(), который пытается проверить значение в каждой ячейке отдельно и показывает предупреждение, которое просит использовать .all() или .any() - но .all() или .any() может выдавать ошибку, если frame равно None.


КСТАТИ: Иногда cv2 имеет проблему с поиском файла haarcascades. И есть специальная переменная с путем к папке с .xml - cv2.data.haarcascades - и вам может понадобиться

faceCascade = cv2.CascadeClassifier( os.path.join(cv2.data.haarcascades, "haarcascade_frontalface_default.xml") )
0 голосов
/ 06 марта 2020

О боже ... Я только что понял, что работаю в виртуальной среде Google Colab, поэтому он не может подключиться к моей локальной камере.

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