Opencv:仅在捕获图像时由零组成的Numpy数组

时间:2019-07-01 22:14:59

标签: python python-3.x opencv numpy-ndarray

我正在使用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)返回的numpy数组只有在显示的图像不是全黑的情况下才由零值组成,我可以看到我的脸:

>>> 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 :(得分:0)

帧应为适当的np数组。您检查了整个框架吗?打印仅显示框架的一小部分。您可以打印np.nonzero(frame)以获取所有填充点的索引。