python OpenCV 按(帧数/时间)间隔截取视频帧
opencv
OpenCV: 开源计算机视觉库
项目地址:https://gitcode.com/gh_mirrors/opencv31/opencv
免费下载资源
·
帧率(FPS):每秒钟播放的帧数
1、如果你想直接通过帧数间隔截取视频帧,那直接使用可以使用下面的代码:
import cv2
cap = cv2.VideoCapture("./query_video/test_video_0.mp4")
c = 1
frameRate = 100 # 帧数截取间隔(每隔100帧截取一帧)
while(True):
ret, frame = cap.read()
if ret:
if(c % frameRate == 0):
print("开始截取视频第:" + str(c) + " 帧")
# 这里就可以做一些操作了:显示截取的帧图片、保存截取帧到本地
cv2.imwrite("./capture_image/" + str(c) + '.jpg', frame) # 这里是将截取的图像保存在本地
c += 1
cv2.waitKey(0)
else:
print("所有帧都已经保存完成")
break
cap.release()
2、如果你想通过时间间隔截取视频帧,可以做一个时间到帧数的变换:
假如你想每隔10秒截取一帧,那么就相当于你要每隔( FPS * 10 )帧截取一帧图像!
因此,首先你需要知道你的视频的帧率(FPS)是多少:通过 openCV 获取一下即可:
cap = cv2.VideoCapture("./query_video/test_video_0.mp4")
FPS = cap.get(5) # 这个是获取视频帧率
最后将两段代码结合起来就可以根据时间间隔来截取视频帧了:
import cv2
cap = cv2.VideoCapture("./query_video/test_video_0.mp4")
c = 1
timeRate = 10 # 截取视频帧的时间间隔(这里是每隔10秒截取一帧)
while(True):
ret, frame = cap.read()
FPS = cap.get(5)
if ret:
frameRate = int(FPS) * timeRate # 因为cap.get(5)获取的帧数不是整数,所以需要取整一下(向下取整用int,四舍五入用round,向上取整需要用math模块的ceil()方法)
if(c % frameRate == 0):
print("开始截取视频第:" + str(c) + " 帧")
# 这里就可以做一些操作了:显示截取的帧图片、保存截取帧到本地
cv2.imwrite("./capture_image/" + str(c) + '.jpg', frame) # 这里是将截取的图像保存在本地
c += 1
cv2.waitKey(0)
else:
print("所有帧都已经保存完成")
break
cap.release()
GitHub 加速计划 / opencv31 / opencv
77.38 K
55.71 K
下载
OpenCV: 开源计算机视觉库
最近提交(Master分支:2 个月前 )
c3747a68
Added Universal Windows Package build to CI. 5 天前
9b635da5 - 5 天前
更多推荐
已为社区贡献8条内容
所有评论(0)