OpenCV numpy 矩阵框架用零填充

OpenCV numpy matrix frame is filled with zeroes

我最近在 windows 上下载了 openCV 3.4.5,Python 3.5.4。

我运行这段基本代码显示视频:

import cv2

cap = cv2.VideoCapture(0)

while(True):
    # Capture frame-by-frame
    ret, frame = cap.read()
    print(frame)

    # Display the resulting frame
    cv2.imshow('frame', frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# When everything done, release the capture
cap.release()
cv2.destroyAllWindows()

我的笔记本电脑的网络摄像头显示了一段视频。
请注意,我打印了视频中的每一帧,但在我的控制台输出中,每个 numpy 数组都填充了零。我不明白为什么会这样,因为视频可以播放

示例控制台输出

[[[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]]

 ...

来自Opencv docsVideoCaptureread方法returns(ret, frame)的一个元组。如果 frame 的读取成功,frame 将为 True,否则为 False。因此,为了让您弄清楚 运行 您的代码时发生了什么,您应该这样做:

  • while 循环中的打印语句更改为 print(ret) 然后再次 运行 您的代码
    • 如果 ret 值大部分或全部是 True,则每个 frame 的读入通常是成功的。这意味着 frame 数组实际上并不是空的,它们只是出于某种原因在您的打印输出中以这种方式出现(例如,边缘上的所有值都是 0,但在被点省略的部分 ...)。如果您随后将打印语句更改为 print(frame.sum()),您应该能够轻松地看到每个 frame
    • 中至少有一些非零值
    • 如果 ret 值大部分是 False,那么这意味着大多数 Frame 的读取失败,这反过来意味着空数组是预期值.如果 imshow 在这种情况下真的还在显示图像,那就意味着真正非常奇怪的事情正在发生。