Python使用OpenCV从视频中按秒提取图片
本文介绍如何利用Python和OpenCV库从视频中按秒提取图片。通过获取视频帧率,设定提取间隔,实现每秒保存一帧图像的功能。适用于行人检测等需要视频转图片数据集的场景。
视频转图片需求背景
在进行行人检测项目时,通常需要将视频数据转换为图片数据集。为了便于处理,希望从视频中按秒提取图片。
- 使用的编程语言为Python。
- 需要安装cv2和numpy库(请自行安装)。
OpenCV基础帧提取实现
OpenCV提供了读取视频帧的函数,以下代码可实现逐帧提取图片。注意:示例视频名为2.mp4,需预先创建名为output的文件夹用于保存图片。
逐帧保存图片代码示例
# 导入所需要的库
import cv2
import numpy as np
# 定义保存图片函数
# image:要保存的图片名字
# addr;图片地址与相片名字的前部分
# num: 相片,名字的后缀。int 类型
def save_image(image,addr,num):
address = addr + str(num)+ '.jpg'
cv2.imwrite(address,image)
# 读取视频文件
videoCapture = cv2.VideoCapture("2.mp4")
# 通过摄像头的方式
# videoCapture=cv2.VideoCapture(1)
#读帧
success, frame = videoCapture.read()
i = 0
while success :
i = i + 1
save_image(frame,'./output/image',m)
if success:
print('save image:',i)
success, frame = videoCapture.read()
按秒提取图片的逻辑与方法
若需按秒提取,只需知道视频每秒的帧数,并在上述代码基础上每隔相应帧数提取一次即可。这需要先查看视频的帧率。通常可通过播放器右键查看视频属性获取帧率。例如,若视频帧率为12,则每隔12帧提取一次,即可得到每秒的图片。代码如下:
按秒提取代码示例
# 导入所需要的库
import cv2
import numpy as np
# 定义保存图片函数
# image:要保存的图片名字
# addr;图片地址与相片名字的前部分
# num: 相片,名字的后缀。int 类型
def save_image(image,addr,num):
address = addr + str(num)+ '.jpg'
cv2.imwrite(address,image)
# 读取视频文件
videoCapture = cv2.VideoCapture("2.mp4")
# 通过摄像头的方式
# videoCapture=cv2.VideoCapture(1)
#读帧
success, frame = videoCapture.read()
i = 0
timeF = 12
j=0
while success :
i = i + 1
if (i % timeF == 0):
j = j + 1
save_image(frame,'./output/image',j)
print('save image:',i)
success, frame = videoCapture.read()
总结
以上为本文的全部内容,希望对您的学习有所帮助,也欢迎大家多多支持本站。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









