python-opencv文件夹中所有视频按顺序截图片并按顺序命名
使用背景
有时候我们需要把文件夹中的视频按照一定的帧率截取图片,如一秒取三张,为了实现这一需求,我特地编写了代码实现,并且附上了十分详细的说明,为了方便大家改代码实现自己需求(主要为了照顾刚学python的或者只需要用这一需求的小伙伴),本博文的特点如下:
- 直接改变输入文件夹和输出文件夹的位置,就可以实现功能
- 输出的图片能按照一定格式命名,这里是以20210823_0001命名
- 逐一遍历文件夹中视频,序号之间可以连续(也可不连续,需要改代码)
- 利用双线性插值方法,就算图片变大了,也能保证分辨率(关于双线性,这里只是调用opencv方法实现,具体实现代码和原理可看我下一篇博文)
- 代码解释十分详细,一看就懂
十分详细代码实现
首先先说明需要自己修改的参数,代码如下:
filepath = 'C:/Users/ZFG/Desktop/1111' #视频文件夹所在目录
data='20210823' #要是储存的文件为20210823_0001格式,则为前半部分
save_filename='C:/Users/ZFG/Desktop/2222/' #储存图片的文件夹的地址
timeF = 6 #根据一秒取多少帧设置,比如我的视频是24帧/秒,取6则一秒取三张
kernal=(700,700) #设置输出的大小,根据自己需求设置
然后再设置一个方法,来储存截取后的图片:
def saveImage(image,SaveAddress,num): #image为读取的图片,SaveAddress为需要存的地址,num为截取图片时候记录的序号address= SaveAddress+data+'_'+str(num).zfill(4)+'.jpg' #这里设置输出格式cv2.imwrite(address,image) #这里为存图片
之后读取文件夹:
pathDir = os.listdir(filepath)
i=0
j=0
for allDir in pathDir: #遍历文件夹中的每一个视频videopath =filepath+'/'+ allDirvideoCapture=cv2.VideoCapture(videopath) #输入绝对路径untill,picture=videoCapture.read() #读取视频,视频读取完的时候,返回的untill为False,表示视频读取完毕while untill:i+=1if (i%timeF==0): #根据原视频的帧率看截图图片的频率j+=1picture=cv2.resize(picture,kernal,cv2.INTER_LINEAR) #这里调用了opencv中的双线性插值法,要是图片增加很快,保证了图片精度saveImage(picture,save_filename,j) #调用我们之前描述的方法passuntill, picture = videoCapture.read() #再次看视频是否结束,结束了则until为False
将上诉代码结合后,最终程序如下所示:
import cv2
import osi = 0
j = 0
pathDir = os.listdir(filepath)
filepath = 'C:/Users/ZFG/Desktop/1111'
data='20210823'
save_filename='C:/Users/ZFG/Desktop/2222/'
timeF = 6
kernal=(700,700)
def saveImage(image,SaveAddress,num):address= SaveAddress+data+'_'+str(num).zfill(4)+'.jpg'cv2.imwrite(address,image)
for allDir in pathDir:videopath =filepath+'/'+ allDirvideoCapture=cv2.VideoCapture(videopath)untill,picture=videoCapture.read()while untill:i+=1if (i%timeF==0):j+=1picture=cv2.resize(picture,kernal,cv2.INTER_LINEAR)saveImage(picture,save_filename,j)passuntill, picture = videoCapture.read()
最后看下效果吧:
第一张图是文件夹中的视频,帧率是24帧/秒,第二张图是一秒取三张图片后,图片储存在文件夹中的图。
python-opencv文件夹中所有视频按顺序截图片并按顺序命名相关推荐
- Android插u盘自动执行,android tv box ---- 插入u盘直接播放指定文件夹中的视频
android tv box ---- 插入u盘直接播放指定文件夹中的视频思路: 1.监听u盘插入广播 2.遍历指定目录下的所有文件,找到视频文件 3.将符合条件的文件加入播放集合中 4.循环播放 n ...
- 使用Python读取文件夹中的图片
文章目录 Python创建新的文件夹 Python读取文件夹中的图片内容以及存取 一个文件夹中含有大量的图片文件,jpg格式和png格式的.需要从中选出一些比较适合电脑分辨率的,也就是宽度大于高度 ...
- Python提取文件夹中的所有文件名输出到excel
Python提取文件夹中的所有文件名输出到excel import os import openpyxldef getfilelist(dir,file_out,sheet_out):filelist ...
- u盘里android文件夹作用,Android应用开发android tv box ---- 插入u盘直接播放指定文件夹中的视频...
本文将带你了解Android应用开发android tv box ---- 插入u盘直接播放指定文件夹中的视频,希望本文对大家学Android有所帮助. android tv box ---- 插入u ...
- python把文件夹中所有的图片按顺序转换成视频
最近需要把文件夹中多个图片转换成视频,试了一些软件发现都不好使.刚好最近又接触了 python+opencv的相关知识,索性参考网上代码,自己写了一个.发现才十几行..果然人生苦短,我用python. ...
- python检测文件夹中新增文件_python检测文件夹变化,并拷贝有更新的文件到对应目录的方法...
检测文件夹,拷贝有更新的文件到对应目录 2016.5.19 亲测可用,若有借鉴请修改下文件路径: 学习python小一个月后写的这个功能,属于初学,若有大神路过,求代码优化~ newcopy.py: ...
- python怎么创建文件夹_如何使用python在文件夹中创建文本文件?
我试图在一个不是运行脚本的目录的文件夹中创建一个.txt文件.我有一个脚本所在的文件夹,我可以在脚本所在的同一个目录中创建该文件夹,但它不会在该文件夹中创建文本文件.我通常遇到两个错误中的一个:Per ...
- python从文件夹中提取指定文件_使用Python实现从各个子文件夹中复制指定文件的方法...
之前用来整理图片的小程序,拿来备忘,算是使用Python复制文件的一个例子. # -*- coding: utf-8 -*- #程序用来拷贝文件并输出图片采集日期等其他信息到Excel中 #文件夹结构 ...
- python保存文件夹中的文件路径(绝对路径)
保存文件夹中的文件路径(绝对路径). # !/usr/bin/env python # -*- encoding: utf-8 -*-import osimg_path = '/home/jjuv/D ...
最新文章
- 项目性能优化(MySQL读写分离、MySQL主从同步、Django实现MySQL读写分离)
- 全球只有4个人通关的游戏!不过如此
- 释疑のSmartforms点打印无反应
- python游戏开发的五个案例分享
- 活久见,自己创造的框架竟然比开源的好用
- Python链家租房信息爬虫和高德地图展示
- Bagging和Boosting 策略及其区别
- 魔兽世界lua笔记(4、集合石插件修改,实现集合石亮灯hack)
- 使用Eclipse IDE的技巧
- RxJava操作符学习APP
- 微软新专利暗示:多功能Surface Pen触控笔可能问世
- 理解时间:时间时区那些事
- date( 1day ) php,PHP_使用PHP的日期与时间函数技巧,PHP的日期时间函数date() 1,年- - phpStudy...
- hadoop ha搭建 namenode格式化失败等错误
- 焊接过程计算机模拟研究,焊接过程的数值模拟
- (附源码)spring boot大学生综合素质测评系统 毕业设计 162308
- R语言ggplot2可视化:使用patchwork包将3个ggplot2可视化结果横向组合(三幅图各占比例为33.3%,加和为100%)
- mysql数据类型、字段类型
- Build and run UDK2021.8 Emulator in Deepin-20.2.4
- c语言中将32位值赋给16位变量,C语言数据类型和变量-参考.ppt