我最近在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]]
...
read方法VideoCapture返回一个元组(ret, frame)。如果读取成功,那frame将是。因此,为了让您澄清运行代码时发生的情况,以下是您应该执行的操作:TrueframeFalse
更改while循环中的print语句,print(ret)然后再次运行代码
如果ret值大部分或全部True,那么每个的读数frame通常都是成功的。这意味着frame数组实际上并不是空的,它们只是出于某种原因在打印输出中出现(例如,边缘上的所有值都是0,但是零件中的非零值会被点删除...)。如果然后将print语句更改为print(frame.sum()),则应该能够轻松地看到每个语句中至少有一些非零值frame
如果ret值大部分是False,那么这意味着大多数Frames 的读入失败,这反过来意味着空数组是期望值。如果imshow在这种情况下仍然显示图像,那意味着真正发生了一些真正奇怪的事情。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。