Захват видео с камеры с помощью cv2 печатает матрицы, полные нулей

Я пытаюсь захватить данные с веб-камеры, используя cv2 в python, но когда я печатаю кадр, все матрицы содержат только нулевые значения. Камера работает, видео показывает, черного экрана нет.

это код

import cv2

video = cv2.VideoCapture(0)
a = 0

while True:
    a = a + 1
    check, frame = video.read()
    print(frame)
    cv2.imshow("Capturing", frame)
    key = cv2.waitKey(1)
    if key == ord('q'):
       break

video.release()
cv2.destroyAllWindows()

Вот как выглядит вывод


person Lexi    schedule 28.02.2019    source источник
comment
Скрипт работает нормально. Можете ли вы добавить образец трассировки скрипта?   -  person Sleeba Paul    schedule 28.02.2019
comment
Добавил принтскрин. Я взял код от других пользователей, которые сказали, что код в порядке, но я понятия не имею, почему он не работает у меня...   -  person Lexi    schedule 28.02.2019
comment
Просто добавьте if check: и покажите кадр. Ты что-то видишь?   -  person Sleeba Paul    schedule 28.02.2019
comment
Да, проходит условие   -  person Lexi    schedule 28.02.2019
comment
У вас только одна камера?   -  person N00b    schedule 28.02.2019
comment
Сделайте тест: сначала запишите видео с этой камеры, а затем поместите этот видеофайл в свой код: video = cv2.VideoCapture('myRecordedVideo'). Проверьте, есть ли все еще только нули.   -  person N00b    schedule 01.03.2019


Ответы (1)


Я проверил ваш код, он работает для меня.

Я бы предложил:

  • печатать один кадр каждые n, например (100)
  • сбросить отпечаток, чтобы вы могли видеть отпечаток кадра во время захвата

Итак, попробуйте изменить строку печати на:

if a%100 == 0: print(frame, flush = True)
person iGian    schedule 28.02.2019
comment
Я попробовал это, и похоже, что каждый напечатанный кадр - это просто нули - person Lexi; 28.02.2019
comment
Вы видите окно с трансляцией камеры? - person iGian; 28.02.2019
comment
Я пробовал как на Windows, так и на OSX, и все работает нормально. Я получаю все нули только в том случае, если веб-камера идеально прикрыта. Но ты сказал, что можешь видеть трансляцию с камеры. Как вы можете видеть на снимке, массив печатается не полностью из-за его размера. Вместо печати кадра используйте эту строку: print(frame.any(), flush = True). Если есть какое-то значение, отличное от нуля, должно быть напечатано True. - person iGian; 28.02.2019
comment
Похоже, там какой-то не ноль, потому что он печатает true, но я все еще не думаю, что он работает должным образом, в других примерах матрицы выглядели совсем иначе, они не могут быть в основном нулевыми. - person Lexi; 28.02.2019
comment
Последний вариант могу предложить: запустить программу из терминала (в windows Command Prompt). На данный момент у меня закончились идеи, так как я не могу воспроизвести проблему. - person iGian; 28.02.2019