Opencv: массив Numpy, состоящий из нуля только во время захвата изображения - PullRequest
0 голосов
/ 02 июля 2019

Я использую Python 3.7.3, и я пытаюсь инициировать OpenCV и захват и модификацию видео.Но я сталкиваюсь со следующей проблемой: когда я запускаю приведенный ниже код, данные моей веб-камеры хорошо фиксируются и отображаются в окне imshow, но я не могу получить правильный массив Numpy:

import cv2

first_frame = None

video = cv2.VideoCapture(0)
cpt = 0

while True:
    check, frame = video.read()

    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    gray = cv2.GaussianBlur(gray,(21,21), 0)

    if cpt < 40:
        first_frame = gray
        cpt = cpt + 1
        print(cpt)
        continue

    delta_frame = cv2.absdiff(first_frame, gray)

    cv2.imshow("Gray frame", gray)

    cv2.imshow("Delta frame", delta_frame)

    key = cv2.waitKey(1)
    print(frame)
    if key == ord('q'):
        break

video.release()
cv2.destroyAllWindows()

Изображения с моей веб-камерыхорошо фиксируются, потому что я вижу результат в окне, открываемом imshow ().

Но возвращаемый массивом print(frame) массив значений состоит только из нулевых значений, в то время как отображаемые изображения не полностью черные, я вижу свое лицо:

>>> frame
array([[[0, 0, 0],
        [0, 0, 0],
        [0, 0, 0],
        ...,
        [0, 0, 0],
        [0, 0, 0],
        [0, 0, 0]],
       [[0, 0, 0],
        [0, 0, 0],
        [0, 0, 0],
        ...,
        [0, 0, 0],
        [0, 0, 0],
        [0, 0, 0]],
       [[0, 0, 0],
        [0, 0, 0],
        [0, 0, 0],
        ...,
        [0, 0, 0],
        [0, 0, 0],
        [0, 0, 0]],
       ...,
       [[0, 0, 0],
        [0, 0, 0],
        [0, 0, 0],
        ...,
        [0, 0, 0],
        [0, 0, 0],
        [0, 0, 0]],
       [[0, 0, 0],
        [0, 0, 0],
        [0, 0, 0],
        ...,
        [0, 0, 0],
        [0, 0, 0],
        [0, 0, 0]],
       [[0, 0, 0],
        [0, 0, 0],
        [0, 0, 0],
        ...,
        [0, 0, 0],
        [0, 0, 0],
        [0, 0, 0]]], dtype=uint8)

1 Ответ

0 голосов
/ 02 июля 2019

Кадр должен быть правильным массивом np. Вы проверили весь кадр? Печать показывает только небольшую часть кадра. Вы можете напечатать np.nonzero (frame), чтобы получить индекс всех заполненных точек.

...