使用时间戳保存实时视频帧 - Python OpenCV
图像是当今非常重要的数据,我们可以从中获得大量有助于分析的信息。有时要处理的数据可以是视频的形式。为了处理这种数据,我们必须读取视频提取帧并将它们保存为图像。我们看到的安全摄像头视频在帧的顶部有一个时间戳和日期。这种数据在分析中也起着至关重要的作用。因此,在本文中,我们将了解如何从带有时间戳的实时视频中提取帧并将它们保存在文件夹中。
Python3
# Import necessary libraries
import cv2
import os
from datetime import datetime
# set path in which you want to save images
path = r'C:\Users\vishal\Documents\Bandicam'
# changing directory to given path
os.chdir(path)
# i variable is to give unique name to images
i = 1
wait = 0
# Open the camera
video = cv2.VideoCapture(0)
while True:
# Read video by read() function and it
# will extract and return the frame
ret, img = video.read()
# Put current DateTime on each frame
font = cv2.FONT_HERSHEY_PLAIN
cv2.putText(img, str(datetime.now()), (20, 40),
font, 2, (255, 255, 255), 2, cv2.LINE_AA)
# Display the image
cv2.imshow('live video', img)
# wait for user to press any key
key = cv2.waitKey(100)
# wait variable is to calculate waiting time
wait = wait+100
if key == ord('q'):
break
# when it reaches to 5000 milliseconds
# we will save that frame in given folder
if wait == 5000:
filename = 'Frame_'+str(i)+'.jpg'
# Save the images in given path
cv2.imwrite(filename, img)
i = i+1
wait = 0
# close the camera
video.release()
# close open windows
cv2.destroyAllWindows()
输出:
解释:
- 在上面的程序中,相机将通过将 0 作为 cv2.VideoCapture()函数的输入来打开(如果你想从已经录制的视频中捕获一帧,那么你可以将输入作为该视频的路径提供给这个函数)。
- 之后,我们编写了一个循环,该循环将持续运行,直到用户按下键盘上的任意键。
- 在这个循环中,第一个 read()函数将从打开的相机中捕获一帧。
- 然后 datetime.now() 将给出当前日期和时间,将时间戳放在该帧上,并使用 cv2.imshow()函数显示图像。因为我们是在连续循环中执行此操作,所以看起来像是在播放实时视频。
- 程序中使用了两个变量“i”和“wait”。
- “i”变量用于为图像提供唯一名称,“wait”变量用于暂停连续保存图像。
- 我们只是等待 5 秒钟,然后我们将图像保存在指定的路径中。
- 最后当用户按下键盘上的任意键时程序就会结束。