python 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()

评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值