我是OpenCV的初学者 . 我想对正在上传到我的服务器的视频帧进行一些图像处理 . 我只是想读取可用的帧并将它们写在目录中 . 等待视频的其他部分上传并将帧写入目录 . 我应该等待每个帧完全上传然后将其写入文件 .
你能告诉我怎样才能用OpenCV(Python)做到这一点?
Edit 1: 我编写了这段代码,用于从文件中捕获视频,而新数据则附加在文件的末尾 . 换句话说, out.mp4
文件不是完整的视频,另一个程序正在其上写入新的帧 . 我要做的是,等待其他程序写入新帧然后读取它们并显示它们 .
这是我的代码:
import cv2
cap = cv2.VideoCapture("./out.mp4")
while True:
if cap.grab():
flag, frame = cap.retrieve()
if not flag:
continue
else:
cv2.imshow('video', frame)
if cv2.waitKey(10) == 27:
break
所以问题是 cap.grab()
电话!当没有框架时它将返回 False
!即使我等了很长时间,它也不再捕捉帧了 .
6 回答
阅读VideoCapture的文档后 . 我想你可以告诉
VideoCapture
,下次我们调用VideoCapture.read()(或VideoCapture.grab())时要处理哪个帧 .问题是当你想要一个没有准备好的帧时,
VideoCapture
对象卡在那个帧上并且永远不会继续 . 所以你必须强制它从前一帧开始 .这是代码
用这个 -
在openCV的文档中,有一个example用于逐帧获取视频 . 它是用c编写的,但将示例移植到python非常容易 - 您可以搜索每个fumction文档以查看如何在python中调用它们 .
根据OpenCV 3.0及更高版本的最新更新,您需要在Mehran的代码中更改 Property Identifiers :
至
同样适用于
cv2.CAP_PROP_POS_FRAME_COUNT
.希望能帮助到你 .
这就是我开始解决这个问题的方法:
Check here for valid parameters
WriteFrame doc
[1] zenpoy已经指出了正确的方向 . 您只需要知道您可以从网络摄像头或文件中检索图像:-)
希望我理解这些要求是正确的 .
我找到的唯一解决方案是不将索引设置为前一帧并等待(然后OpenCV停止读取帧,无论如何),但是再次初始化捕获 . 所以,它看起来像这样:
而且效果很好!