python - OpenCV numpy矩阵框架用零填充

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

 ...

最佳答案

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

  • while循环中的打印语句更改为print(ret),然后再次运行代码
  • 如果ret的值大部分或完全是True,则通常可以成功读取每个frame。这意味着frame数组实际上并不是空的,由于某些原因它们只是以这种方式出现在您的打印输出中(例如,边缘上的所有值都是0,但是该部分中存在非零值,因此点...被点所掩盖了)。如果随后将print语句更改为print(frame.sum()),则应该可以轻松地看到每个frame至少有一些非零值
  • 如果ret的值主要是False,则意味着大多数Frame的读取失败,这又意味着空数组是期望值。如果在这种情况下imshow确实仍在显示图像,则意味着正在发生某些真正非常奇怪的事情。
  • 关于python - OpenCV numpy矩阵框架用零填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54299737/

    相关文章:

    python - 确定两个值的差异何时达到最小值

    python-3.x - 为什么使用 sklearn 库随机生成的数据精度较低

    python - Python 中的 Matlab freqz 函数

    python - 我如何判断一个 numpy bool 数组是否只包含一个 `True` block ?

    python - 正则表达式:扑克牌解析器,N of a kind

    python - 如何使用函数式编程在python中创建通用方法?

    python - NumPy,运行时警告: invalid value encountered in power. How can I get see the value of my variables?

    python - NoReverseMatch at/password_reset_complete/'users' 不是注册的命名空间

    python - 导入错误 : No module named 'scrapy'

    python - 使用 numpy 仅加载符合特定条件的行