OpenCV numpy矩阵框架用零填充

时间:2019-01-22 00:44:05

标签: python python-3.x numpy opencv opencv3.0

我最近在Windows上使用Python 3.5.4下载了openCV 3.4.5。

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

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

 ...

1 个答案:

答案 0 :(得分:3)

Opencv docsread的{​​{1}}方法返回VideoCapture的元组。如果成功读取了(ret, frame),则frame将是True,否则将是frame。因此,为了使您在运行代码时弄清楚发生了什么,请执行以下操作:

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