用Python从视频中提取每一帧的图片

我们经常会看到某些视频的画面感觉貌美如画,就像出水的芙蓉一般,就情不自禁想截取下来,却又烦于截图的繁琐,现在我就教大家使用Python提取视频中每一帧的画面,让大家不错过每一个精彩的瞬间!

准备工作

既然是视屏,那么,我们就需要录一段视屏,或者有实时的视屏源,有了视屏源,下面就是要开始实时预览,同时实现实时的抠图。

  1. 所需要的库
    只需要准备好cv2,numpy插件即可,可以自行百度 (自行安装)

  2. 实战分析
    一切的准备工作准备完毕了,那么剩下的就是实战部分,认真分析,你会发现,整个过程可以分为三步完成,首先我们需要开启实时预览,接下来在实时预览的时候实时的将视频中的每帧图片提取出来,最后就是输出保存图片。

    下面就是围绕着三步实现实时抠图。

开始抠图三步曲

  1. 开启视屏实时预览
    在这里,我就用自己本地准备好的视屏实现实时预览(test.mp4是我事先准备好的图片),当然也可以连接网络,实现实时预览,具体可以参考我的上一篇博客《大华海康设备实时推流》
# 导入所需要的库
import cv2
import numpy as np
# 读取视频文件
videoCapture = cv2.VideoCapture("test.mp4")
# 通过摄像头的方式
# videoCapture=cv2.VideoCapture(1)
  1. 预览实时抠图
#读帧
success, frame = videoCapture.read()
i = 0
while success :
  i = i + 1
  # 保存每一帧图片
  save_image(frame,'./output/image',m)
  if success:
    print('save image:',i)
  1. 图片的输出保存
# 定义保存图片函数
# image:要保存的图片名字
# addr;图片地址与相片名字的前部分
# num: 相片,名字的后缀。int 类型
def save_image(image,addr,num):
  address = addr + str(num)+ '.jpg'
  cv2.imwrite(address,image)

好了,至此,简单粗暴的抠图已经完实现,但是,可能有的人觉得不够完美,他会觉得,会不会保存了很多张没有用的图片了,为此,我想到了按秒扣取,至于是多少秒,这个可以让用户自己定义。

改进抠图策略

当我们想按秒提取时,只要我们能知道视频每秒有多少帧,然后在上面的代码基础上每隔那么多帧提取一次就行了,这就需要查看视频的帧率。一般情况下随便用一个播放器打开视频后右键查看其属性就可以看到帧率。现在我的视频帧率为10 ,每隔10帧提取一次就可以得到每秒的图片。代码如下:

# 导入所需要的库
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("test.mp4")
# 通过摄像头的方式
# videoCapture=cv2.VideoCapture(1)
  
#读帧
success, frame = videoCapture.read()
i = 0
#设置固定帧率
timeF = 10
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,音视频)