Веб-камера не работает под Opencv - как решить эту проблему? - PullRequest
0 голосов
/ 06 мая 2020

Вот мой код:

import numpy as np
import cv2

face_cascade = cv2.CascadeClassifier('haarcascase_frontalface_default.xml')
eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')

cap = cv2.VideoCapture(0)

while True:
    ret, img = cap.read()
    gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    faces = face_cascade.detectMultiScale(gray,1.3,5)
    for (x,y,w,h) in faces:
        cv2.rectangle(img, (x,y), (x+w, y+h), (255,0,0), 2)
        roi_gray = gray[y:y+h, x:x+w]
        roi_color = img[y:y+h, x:x+w]

        eye = eye_cascade.detectMultiScale(roi_gray)
        for (ex,ey,ew,eh) in eye:
            cv2.rectangle(roi_color, (ex,ey), (ex+ew, ey+eh), (0,255,0), 2 )
    cv2.imshow('img',img)
    k= cv2.waitKey(30) & 0xff 
    if k == 27:``
        break

cap.release()
cap.destroyAllWindows()

Вот ошибки, которые я получаю:

ошибка: OpenCV (4.2.0) C: \ projects \ opencv-python \ opencv \ modules \ imgproc \ src \ color. cpp: 182: error: (-215: Assertion failed)! _sr c .empty () в функции 'cv :: cvtColor'

ошибка Traceback (последний вызов последний) в 3, пока True: 4 ret, img = cap.read () ----> 5 gray = cv2.cvtColor (img, cv2.COLOR_BGR2GRAY) 6 faces = face_cascade.detectMultiScale ( серый, 1.3,5) 7 для (x, y, w, h) в лицах:

ошибка: OpenCV (4.2.0) C: \ projects \ opencv-python \ opencv \ modules \ imgproc \ src \ color. cpp: 182: ошибка: (-215: утверждение не выполнено)! _sr c .empty () в функции 'cv :: cvtColor'

1 Ответ

0 голосов
/ 06 мая 2020

Может быть множество причин того, почему это не работает (например, некоторые ОС потребуют, чтобы вы предоставили разрешение на доступ к веб-камере), однако с вашим кодом есть пара проблем:

  • начало while l oop: вы не проверяете значение параметра ret. Хорошей практикой является проверка его значения с помощью небольшой проверки, например if not ret: break, для выхода из l oop. Это не поможет, если ваша веб-камера не работает, но это предотвратит ошибку, которую вы видите (ret имеет значение False, поэтому img, скорее всего, пуст и не имеет данных)
  • Конец вашего кода . destroyAllWindows - это метод в пространстве имен cv2, а не свойство вашего захвата. Звоните cv2.destroyAllWindows() вместо cap.destroyAllWindows()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...