我想使用Raspberry pi实时捕获带有时间戳的视频帧。该视频由USB网络摄像头使用python代码中的ffmpeg()
函数制作。如何在Raspberry pi中保存USB网络摄像头当前制作的视频帧?
我尝试使用opencv的三个功能。 cv2.VideoCapture用于检测视频,video.read()
用于捕获帧,cv2.imwrite()
用于保存帧。此处是代码,为简洁起见,未提及所包含的库。
os.system('ffmpeg -f v4l2 -r 25 -s 640x480 -i /dev/video0 out.avi')
video=cv2.VideoCapture('out.avi')
ret, frame=video.read()
cv2.imwrite('image'+str(i)+'.jpg',frame)
i+=1
该代码保存以前由网络摄像头制作的视频帧。它不会保存网络摄像头当前正在录制的视频帧。
答案 0 :(得分:0)
您可以阅读here,因此可以使用ret, frame = camera.read()
访问相机。 0是所连接摄像机的索引。您可能需要尝试使用其他索引,但通常使用0。
与视频文件类似,您可以使用ret
来抓取帧。在继续处理帧之前,请始终检查imwrite
值。
接下来,您可以按照here所述向框架添加文本。
您可以使用time或datetime获取时间戳。
最后保存框架。
注意:如果您使用time.time()
,则会快速获得很多图像。根据您的项目,您还可以考虑将帧另存为视频文件。说明here。
评论后编辑:
这是您使用time.time()
的方式。首先将时间模块导入代码顶部。 January 1, 1970, 00:00:00
返回自import time
starttime = time.time()
# get frame
timestamp = time.time() - starttime
cv2.putText(frame,timestamp,(10,500), font, 4,(255,255,255),2,cv2.CV_AA)
起的秒数。
因此,要获取时间戳,您必须存储开始时间-程序/视频开始运行的时间。
然后,在每一帧上,调用time.time()并减去开始时间。结果是您的程序/视频已经运行的时间。您可以将该值用作时间戳记。
<nav>
<label class="nav-toggler">
<input type="checkbox" />
</label>
<ul class="nav-links">
<li>link</li>
<li>link</li>
<li>link</li>
</ul>
</nav>