原文地址

分类目录——万能的Python系列

直接上程序,注释说明

import cv2
import os
from application.processbar.progressbar import bar3 # 我自己写的进度条模块,见参考文献# 传入视频全路径,自动在视频路径下生成同名文件夹,将图片保存在里面
def video2img1(pathv):file_name = pathv.split(os.sep)[-1].split('.')[0]  # os.sep当前系统的路径分隔符,也可以用'\\'out_floder = pathv.split('.')[0]    # path全路径去掉最后的后缀,后面依据这个生成跟视频同名的文件夹# 创建存储图片的文件if not os.path.exists(out_floder):os.makedirs(out_floder, exist_ok=True)vc = cv2.VideoCapture(pathv)  # 读入视频文件n_frame = int(vc.get(cv2.CAP_PROP_FRAME_COUNT))     # 视频总帧数c = 0   # 帧索引rval = vc.isOpened()    # 检测vc是否初始化成功,如果成功则返回True,如为初始化则通过vc.open()打开while rval:  # 如果初始化成功,就可以循环读取视频帧c = c + 1rval, frame = vc.read() # 返回两个值,首先返回一个bool值,如果能正确读取帧,则为True,否则为False.可以通过检查该返回值来检查视频的结尾.再返回一个值,为每一帧的图像,该值是一个三维矩阵pic_name = file_name + '_' + str(c).zfill(4) + '.jpg'   # 拼接图片名称if rval:save_path = os.path.join(out_floder, pic_name)cv2.imwrite(save_path, frame)  # 存储为图像,保存名为 文件夹名_数字(第几个文件).jpgbar3(c, n_frame, 40, '处理进度:')    # 调用我自己写的进度条函数,见参考文献cv2.waitKey(1)else:breakvc.release()print('\nsave_success')if __name__ == '__main__':pv = r'E:\Test\historyimg.flv'video2img1(pv)

我的程序在进度条上有一个问题,程序获得的 总帧数 略大于 实际保存的图片总数,导致进度条无法达到100%,至于这是什么原因,我没有去深究。

  • 一丢丢进阶

如果要对某个文件内的所有视频文件做批量修改,可以修改一下__main__部分

if __name__ == '__main__':path = r'E:\Test'   # 文件夹路径filelist = os.listdir(path)     # 获取文件夹下的所有文件/文件夹(当前层,不递归)for fi in filelist:if fi.endswith('.mp4'):     # 判断是否视频文件,如果都是视频文件,可以没有这一步video2img1(fi)
  • 提取“关键帧”

上述方法是提取了全部的帧,实际上这在大多数情况下是不太好的,在我的例子中,我把一段时长为1分钟左右,帧率为25fps(没秒25帧),分辨率为高清(1920x1080)的一段视频的所有帧提取出来,供提取了1400+张图片,总空间占到600+M。对于帧速,最高可到120帧(百度百科),分辨率现在已经有4K甚至更高的分辨率。更关键的是,提取出来的图片很多是相同的,至少在肉眼看来。

针对这种问题,我有看到过提取关键帧这种说法,比如CV | Python + OpenCV从视频中提取关键帧,我理解的这篇文章的做法是每秒取一个,具体操作就是提取帧频,只有当 帧指针 % 帧频==0时,保存当前帧图片。

还有一些做法就比较学术了,笼统的讲就是根据帧图片之间的差异进行排序,把排在考前的差异大的帧图片保存下来,相似的帧就不保存了(留一张),这就薛微有些图像识别的意味了,也就没深入。有这么一篇文章——python实现视频关键帧提取(基于帧间差分)——可以参考一下

参考文献

opencv python 从摄像头获取视频/从文件获取视频 /保存视频

Python语言实现批量视频分帧,保存视频帧

Python:print打印进度条

Python对视频进行分帧保存图片相关推荐

  1. Python实现视频运动目标检测——帧差法

    Python实现视频运动目标检测--帧差法 在许多场景中,我们需要对视频中的运动目标进行检测.而在这个过程中,帧差法是一种常用的方法.本文将详细阐述Python如何利用帧差法实现视频运动目标检测. 首 ...

  2. Python:视频拆分成一帧一帧的图片

    简介:在AI的数据集采集视频相关的测试中,可能需要将视频拆分成一帧一帧的图片进行保存,然后在从关键帧中定位问题或标注等.我们可以通过cv库对视频进行分成一帧帧的图片进行保存,相当于图片转视频的反向操作 ...

  3. 京东猪脸识别比赛数据预处理:用Python将视频每一帧提取存储为图片

    最近参加京东的猪脸识别比赛,训练集是30个视频,需要将视频的每一帧提取出来存储为图片,存入对应的文件夹(分类标签). 本例是直接调用了cv2 模块中的 VideoCapture.一次运行,大概10分钟 ...

  4. python YUV420视频转图像帧

    YUV420p视频转成多帧图像 import os import cv2 import numpy as np from typing import Listdef YUVvideo2IMGs(fil ...

  5. python读取视频并逐帧处理,保存

    已经调通了代码,注释已经非常详细了. # 使用电脑摄像头,处理之后进行保存import numpy as np import cv2 as cv# 捕获本地视频,请自行修改自己存放视频的路径 cap ...

  6. Python 把视频切割成一帧帧的图片

    subprocess.call('mkdir imagedir', shell=True)cmd1 = 'ffmpeg -i {} imagedir/image_%05d.jpg'.format(vi ...

  7. python获取视频帧的时间_Python提取视频中图片的示例(按帧、按秒)

    一.按帧提取 #coding=utf-8 import os import cv2 def save_img(): #提取视频中图片 按照每帧提取 video_path = r'D:\\test\\' ...

  8. python做视频抽帧图_Python提取视频中图片的示例(按帧、按秒)

    一.按帧提取 #coding=utf-8 import os import cv2 def save_img(): #提取视频中图片 按照每帧提取 video_path = r'd:\\test\\' ...

  9. 使用OpenCV和Python高效计算视频的总帧数

    使用OpenCV和Python高效计算视频的总帧数 1. 效果图 2. 源码 参考 这篇博客将介绍两种使用OpenCV和Python计算视频文件中帧数的方法. 超级快,它依靠OpenCV的视频属性功能 ...

最新文章

  1. 测量 XW-HLR26-24G 微波雷达模块的性能测试
  2. Spring和Spring MVC包扫描
  3. WEB安全:XSS漏洞与SQL注入漏洞介绍及解决方案
  4. Esp32-CAM(ESP32带camera)使用说明
  5. 聊聊flink的Execution Plan Visualization
  6. 20179214《网络攻防实践》第二周学习总结
  7. 前端学习(3288):react hook state-hook
  8. windows:(1)xmind常用快捷键
  9. adblock去除烦人的广告
  10. 是谁榨干了 Android 设备的电量和流量?!| 极客头条
  11. (LINQ 学习系列)(6)Linq教程实例: 使用自写类代码来访问数据
  12. --allow-file-access-from-files 命令的使用
  13. 搭建高性能计算环境(九)、应用软件的安装之gaussian 09
  14. 京东商品评论分析(爬虫+分词+词云图)
  15. 使用云祺虚拟机备份软件瞬时恢复H3C CAS 虚拟机
  16. 一个小型RISC-V开源处理器核介绍!
  17. Sql有条件的插入语句
  18. 基于S7-1200 PLC实现PIDNN控制仿真
  19. 安卓手机主题软件_安卓必备APP大盘点:10款软件让你的手机脱胎换骨
  20. matlab中矩阵重排列,稀疏矩阵重新排序 - MATLAB Simulink Example - MathWorks 中国

热门文章

  1. Android弹出自定义Dialog,android自定义Dialog实现底部弹窗
  2. GStreamer概述
  3. 联通ADSL改小区宽带
  4. win7 下使用cygwin
  5. 嵌套 DataList 梆定
  6. 高效数据存储格式Parquet
  7. 蓝牙耳机哪一款好用?学生党开学最值得入手的真无线蓝牙耳机
  8. 林书豪049-联悦季前赛
  9. 案例三---写网页,安利首页
  10. box-sizing: border-box;是什么意思