我最近在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中,read
的VideoCapture
方法返回(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/