OpenCV возвращает массив всех нулей на video.read - PullRequest
0 голосов
/ 20 марта 2019

Ниже приведен соответствующий код

import cv2 as cv
import numpy as np

video = cv.VideoCapture(0) #tells obj to use built in camera\

#create a face cascade object 
face_cascade  = 
cv.CascadeClassifier(r"C:\Users\xxxxxxx\AppData\Roaming\Python\Python36\site- 
packages\cv2\data\haarcascade_frontalcatface.xml")

a = 1
#create loop to display a video
while True:
    a = a + 1
    check, frame = video.read()
    print(frame)

    #converts to a gray scale img
    gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)

    #create the faces
    faces = face_cascade.detectMultiScale(gray, scaleFactor=1.5, minNeighbors=5)

    for(x, y, w, h) in faces:
        print(x, y, w, h)

    #show the image
    cv.imshow('capturing', gray)

    key = cv.waitKey(1) #gen a new frame every 1ms

    if key == ord('q'): #once you enter 'q' the loop will be exited
        break

print(a) #this will print the number of frames

#captures the first frame
video.release() #end the web cam

#destroys the windows when you are not defined
cv.destroyAllWindows()

Код отображает видео, снятое с камеры моей веб-камеры. Несмотря на это, OpevCV, похоже, не обрабатывает какие-либо кадры, так как все кадры выглядят так

 [[0 0 0]
  [0 0 0]
  [0 0 0]
  ...
  [0 0 0]
  [0 0 0]
  [0 0 0]]]

что я предполагаю означает, что они пусты.

Я полагаю, это мешает алгоритму обнаружить мое лицо в кадре. У меня такое ощущение, что проблема заключается в кодеке ffmpeg, но я не совсем уверен, как действовать, даже если это так.

ОС: Windows 10 Язык: Python

РЕДАКТИРОВАТЬ: фрейм не пустой, но все значения в массиве, кажется, '0'

Почему рамка пуста и как я могу заставить OpenCV обнаружить моё лицо в кадре?

Ответы [ 2 ]

2 голосов
/ 20 марта 2019

Иногда изображение не может быть прочитано, поэтому cv2 возвращает пустую матрицу, вам нужно убедиться, что кадр не пустой.

...
while True:
    a += 1
    check, frame = video.read()
    if not check or frame.empty():
        continue
    ...
1 голос
/ 22 марта 2019

Убедитесь, что вы можете подключиться к камере

...
while True:
    a = a + 1
    if video.isOpened():
        check, frame = video.read()
        print(frame)
    ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...