python如何实现从视频中提取每秒图片

yipeiwu_com6年前Python基础

我是在做行人检测中需要将一段视频变为图片数据集,然后想将视频每秒钟的图片提取出来。

  • 语言:python
  • 所需要的库:cv2,numpy (自行安装)

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持【听图阁-专注于Python设计】。

相关文章

Python动态导入模块的方法实例分析

本文实例讲述了Python动态导入模块的方法。分享给大家供大家参考,具体如下: 一、正常导入模块 正常模块导入方式: import module(模块路径) 同时导入多个模块: im...

解决python matplotlib imshow无法显示的问题

实例如下所示: import matplotlib.pyplot as plt plt.imshow(img) #控制台打印出图像对象的信息,而图像没有显示 解决方法: #引入pyl...

Python使用百度API上传文件到百度网盘代码分享

关于如何获取 access_token 这个可以自己查百度开放的OAuth 2.0 的 API。这里不做介绍。 第三方 Python 库 poster 复制代码 代码如下: # cod...

python 实现从高分辨图像上抠取图像块

我就废话不多说了,直接上代码吧! #coding=utf-8 import cv2 import numpy as np import os # 程序实现功能: # 根据patch在...

Python实现二叉搜索树

Python实现二叉搜索树

二叉搜索树 我们已经知道了在一个集合中获取键值对的两种不同的方法。回忆一下这些集合是如何实现ADT(抽象数据类型)MAP的。我们讨论两种ADT MAP的实现方式,基于列表的二分查找和哈...