Python对视频进行分帧保存图片
原文地址
分类目录——万能的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对视频进行分帧保存图片相关推荐
- Python实现视频运动目标检测——帧差法
Python实现视频运动目标检测--帧差法 在许多场景中,我们需要对视频中的运动目标进行检测.而在这个过程中,帧差法是一种常用的方法.本文将详细阐述Python如何利用帧差法实现视频运动目标检测. 首 ...
- Python:视频拆分成一帧一帧的图片
简介:在AI的数据集采集视频相关的测试中,可能需要将视频拆分成一帧一帧的图片进行保存,然后在从关键帧中定位问题或标注等.我们可以通过cv库对视频进行分成一帧帧的图片进行保存,相当于图片转视频的反向操作 ...
- 京东猪脸识别比赛数据预处理:用Python将视频每一帧提取存储为图片
最近参加京东的猪脸识别比赛,训练集是30个视频,需要将视频的每一帧提取出来存储为图片,存入对应的文件夹(分类标签). 本例是直接调用了cv2 模块中的 VideoCapture.一次运行,大概10分钟 ...
- python YUV420视频转图像帧
YUV420p视频转成多帧图像 import os import cv2 import numpy as np from typing import Listdef YUVvideo2IMGs(fil ...
- python读取视频并逐帧处理,保存
已经调通了代码,注释已经非常详细了. # 使用电脑摄像头,处理之后进行保存import numpy as np import cv2 as cv# 捕获本地视频,请自行修改自己存放视频的路径 cap ...
- Python 把视频切割成一帧帧的图片
subprocess.call('mkdir imagedir', shell=True)cmd1 = 'ffmpeg -i {} imagedir/image_%05d.jpg'.format(vi ...
- python获取视频帧的时间_Python提取视频中图片的示例(按帧、按秒)
一.按帧提取 #coding=utf-8 import os import cv2 def save_img(): #提取视频中图片 按照每帧提取 video_path = r'D:\\test\\' ...
- python做视频抽帧图_Python提取视频中图片的示例(按帧、按秒)
一.按帧提取 #coding=utf-8 import os import cv2 def save_img(): #提取视频中图片 按照每帧提取 video_path = r'd:\\test\\' ...
- 使用OpenCV和Python高效计算视频的总帧数
使用OpenCV和Python高效计算视频的总帧数 1. 效果图 2. 源码 参考 这篇博客将介绍两种使用OpenCV和Python计算视频文件中帧数的方法. 超级快,它依靠OpenCV的视频属性功能 ...
最新文章
- 测量 XW-HLR26-24G 微波雷达模块的性能测试
- Spring和Spring MVC包扫描
- WEB安全:XSS漏洞与SQL注入漏洞介绍及解决方案
- Esp32-CAM(ESP32带camera)使用说明
- 聊聊flink的Execution Plan Visualization
- 20179214《网络攻防实践》第二周学习总结
- 前端学习(3288):react hook state-hook
- windows:(1)xmind常用快捷键
- adblock去除烦人的广告
- 是谁榨干了 Android 设备的电量和流量?!| 极客头条
- (LINQ 学习系列)(6)Linq教程实例: 使用自写类代码来访问数据
- --allow-file-access-from-files 命令的使用
- 搭建高性能计算环境(九)、应用软件的安装之gaussian 09
- 京东商品评论分析(爬虫+分词+词云图)
- 使用云祺虚拟机备份软件瞬时恢复H3C CAS 虚拟机
- 一个小型RISC-V开源处理器核介绍!
- Sql有条件的插入语句
- 基于S7-1200 PLC实现PIDNN控制仿真
- 安卓手机主题软件_安卓必备APP大盘点:10款软件让你的手机脱胎换骨
- matlab中矩阵重排列,稀疏矩阵重新排序
- MATLAB Simulink Example
- MathWorks 中国