python - OpenCV 读取 MP4 给出所有零帧
问题描述
我一直在尝试使用 python-opencv 逐帧读取这个 mp4 文件。以下是我的代码。
import cv2
filename = '<absolute path>/HandWash_014_A_11_G_03.mp4'
cap = cv2.VideoCapture(filename)
while(cap.isOpened()):
ret, frame = cap.read()
print(frame, ret)
if ret:
cv2.imshow("frame", frame)
cv2.waitKey(1)
else:
break
cap.release()
cv2.destroyAllWindows()
当我在阅读后立即打印框架时,我得到所有零数组,如下所示。然后我尝试在同一文件夹中读取不同的 mp4 文件,但成功返回非零值。另外,请注意这个有问题的文件可以使用媒体播放器成功播放(我尝试过 Quicktime 播放器)。
[[[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]]
...
[[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]]]
我实际上是在尝试逐帧从这个 Kaggle 数据集中读取文件 https://www.kaggle.com/realtimear/hand-wash-dataset
请帮助我理解这里的问题。任何帮助是极大的赞赏。
解决方案
有时视频文件已损坏或与 opencv 不兼容。视频播放器可以读取它,因为它旨在尝试补偿那些有问题的文件。最好的方法是使用手刹或类似方法重新编码视频。通常可以为我解决问题
推荐阅读
- visual-studio-code - 在远程主机上开发 vscode 扩展
- java - 应用程序在后台时显示 DialogFragment
- c# - 调用客户端 API 后如何再次启动 USSD 会话
- excel - 在自定义任务窗格上捕获控件实例
- fluentd - 我可以有选择地禁用单个 fluentd 插件而不将它们从配置文件中删除吗?
- java - 如何摆脱Android应用栏中的后退按钮
- markdown - pandoc-cite-proc 选项是否有扩展名?
- jupyter-notebook - Jupyter 笔记本在 [*] 停止
- mongodb - 如何使用 mongoose 从 mongodb 中删除重复的名称?
- python - 如何在 vtk 中初始化三角形网格