视频转图片序列、图像序列转视频等处理(mmcv vs. opencv)
文章目录
- mmcv简介
- 视频常用代码片段
- 加载视频
- 读取视频帧
- 视频转图像序列
- 1. `mmcv`版本
- 2. `opencv`版本(大部分工程里使用)
- 图像序列转视频
- `mmcv`版本
- 剪辑视频片段
- 拼接视频
- 修改视频尺寸/分辨率
mmcv简介
mmcv是商汤科技用于计算机视觉研究的基础python库,API比opencv更简洁,很适合深度学习项目的图像、视频预处理。
安装mmcv
依赖库:
pip install mmcv
与opencv相比,mmcv.VideoReader
提供通过序列访问视频帧的API,VideoReader会在内部缓存已访问的帧。
The VideoReader class provides sequence like apis to access video frames. It will internally cache the frames which have been visited.
视频常用代码片段
加载视频
# 加载视频
video = mmcv.VideoReader('test.mp4')# 打印视频长度、分辨率、fps
print(len(video))
print(video.width, video.height, video.resolution, video.fps)
读取视频帧
# 迭代访问所有帧
for frame in video:print(frame.shape)# read the next frame
img = video.read()# read a frame by index
img = video[100]# read some frames
imgs = video[5:10]
视频转图像序列
1. mmcv
版本
- 如果不需要对视频帧进行处理,直接调用
cvt2frames
接口,是最简洁的
# split a video into frames and save to a folder
video = mmcv.VideoReader('test.mp4')
video.cvt2frames('out_dir')
- 如果需要对视频帧进行处理,例如视频识别的样本大多需要resize到统一分辨率,则通过序列直接访问视频帧,并:
# 将视频转成图片序列后的分辨率
new_width = 224
new_height = 224# 读取视频
video = mmcv.VideoReader('test.mp4')
for i in range(len(video)):if video[i] is not None:# 获取每一帧的width、height和channelw, h, c = np.shape(video[i])# 改变图片分辨率if new_width>0 and new_height>0:out_img = mmcv.imresize(video[i], (new_width,new_height))else:out_img = video[i]mmcv.imwrite(out_img,os.path.join('out_dir','img_%05d.jpg'%i))else:warnings.warn('Length inconsistent!'f'Early stop with {i + 1} out of {len(vr)} frames.')break
2. opencv
版本(大部分工程里使用)
# opencv版本的视频转图像序列
cap = cv2.VideoCapture(source)
if cap is None or not cap.isOpened():print('Warning: unable to open video source: ', source)imgs = []
while True:ret, img = cap.read()if ret == False:break imgs.append(img)cv2.imshow('capture %d' % i, img)ch = cv2.waitKey(1)if ch == 27:breakcv2.destroyAllWindows()for i, img in enumerate(imgs):fn = '%s/shot_%03d.bmp' % (save_dir, i)cv2.imwrite(fn, img)#print(fn, 'saved')
图像序列转视频
mmcv
版本
# generate video from frames
mmcv.frames2video('out_dir', 'test.avi')
剪辑视频片段
# 剪辑视频 cut a video clip
mmcv.cut_video('test.mp4', 'clip1.mp4', start=3, end=10, vcodec='h264')
拼接视频
# join a list of video clips
mmcv.concat_video(['clip1.mp4', 'clip2.mp4'], 'joined.mp4', log_level='quiet')
修改视频尺寸/分辨率
# resize a video with the specified size
mmcv.resize_video('test.mp4', 'resized1.mp4', (360, 240))# resize a video with a scaling ratio of 2
mmcv.resize_video('test.mp4', 'resized2.mp4', ratio=2)
视频转图片序列、图像序列转视频等处理(mmcv vs. opencv)相关推荐
- 视频转图片序列 java_OpenCV 视频与图片序列相互转换
45 { 46 sprintf_s(fullVideoName,"%s",videoName);//把videoName打印成一个字符串保存在fullVideoName 中 47 ...
- OpenCV 视频与图片序列相互转换 VideoWriter生成视频流
OpenCV学习笔记(四十七)--VideoWriter生成视频流highgui http://blog.csdn.net/yang_xian521/article/details/7440190 标 ...
- 将图片序列转化为视频文件
原文 http://blog.csdn.net/jxlijunhao/article/details/19981237 原文 https://blog.csdn.net/awakeljw/art ...
- 将图片序列压缩成视频
原文链接:http://blog.csdn.net/carson2005/article/details/7085480 有些时候,我们确实需要将一个图片序列压缩成视频文件,从而方便观看,或者给别人展 ...
- MATLAB与图像处理(四):将图片序列转化为视频文件,将视频文件转化为图片
一,将图片序列转化为视频文件 [cpp] view plain copy
- opencv把图片序列保存为视频
opencv把图片序列保存为视频 1,简介 opencv不仅把一段视频抽成一帧一帧的图片,还可以把连续的图片保存为一段视频,可以很方便的满足我们的需求,下面介绍如何把图片序列保存为视频. 2,open ...
- 图片序列转换为AVI视频或GIF的方法(MATLAB)
转换为AVI的代码(MATLAB) framesPath = 'E:\study\biomass\MFiX_Cases\DEMPIC\Analysis postprocess\PRJ DEMPIC_0 ...
- blender的动画到底导出图片序列形式还是视频形式
Blender可以将动画导出为图片序列或视频形式.在Blender中,你可以通过渲染菜单中的"渲染"选项来将动画导出为视频文件,或者通过渲染菜单中的"图像序列" ...
- opencv 入门笔记十 图片序列保存为视频
1.代码: 其中:视频格式设置请看这篇:opencv 入门笔记三(采集视频,保存视频)_Newjet666的博客-CSDN博客 其中:读取图片并画框请看这篇: opencv 入门笔记八 文件夹读取图片 ...
最新文章
- 一文看尽各种 NLP 任务
- python实战===图片转换为字符的源码(转)
- 信息学奥赛一本通(1407:笨小猴)
- 手把手教我班小姐姐学java之多态
- 搜狐“狐友”正式版上线 扩张我的社交圈
- 522. 最长特殊序列 II
- HTTP协议抓包分析
- OA网站不能正常显示(不能看正文)
- python 高斯过程_【Scikit-Learn 中文文档】高斯过程 - 监督学习 - 用户指南 | ApacheCN...
- JS 实现blob与base64互转
- python 绘图及可视化
- vue-element:实现微信表情
- python实现去除图片水印
- 订单管理_03查询订单信息流程
- 外国人入境日本 后天起须留指印头像
- 大地坐标与空间直角坐标系的相互转化
- Win7更换锁屏壁纸
- apikey、apisecret在api请求中的使用
- KONG网关 — KongA管理UI使用
- java开心消消乐代码_Java小项目之:教你做开心消消乐!
热门文章
- apache做tomcat的反向代理,并实现tomcat的会话共享
- 内存还剩余很多,却使用 swap 分区
- 使用PostgREST的RestAPI操作PostgreSQL数据库教程
- Java Singleton类中的线程安全性的示例代码
- OSPF——多区域概念及配置、ABR简介、ASBR简介、路由重分发
- Android BGradualProgress 多种渐变、直角or弧角、进度条、加载条
- DOTNET Core MVC(二)路由初探
- 04737 c++ 自学考试2019版 第二章课后程序设计题 2
- Docker Compose配置springboot微服务项目
- 大数据 Hive spark Flink 关系