文章目录

  • 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)相关推荐

  1. 视频转图片序列 java_OpenCV 视频与图片序列相互转换

    45 { 46 sprintf_s(fullVideoName,"%s",videoName);//把videoName打印成一个字符串保存在fullVideoName 中 47 ...

  2. OpenCV 视频与图片序列相互转换 VideoWriter生成视频流

    OpenCV学习笔记(四十七)--VideoWriter生成视频流highgui http://blog.csdn.net/yang_xian521/article/details/7440190 标 ...

  3. 将图片序列转化为视频文件

    原文  http://blog.csdn.net/jxlijunhao/article/details/19981237  原文  https://blog.csdn.net/awakeljw/art ...

  4. 将图片序列压缩成视频

    原文链接:http://blog.csdn.net/carson2005/article/details/7085480 有些时候,我们确实需要将一个图片序列压缩成视频文件,从而方便观看,或者给别人展 ...

  5. MATLAB与图像处理(四):将图片序列转化为视频文件,将视频文件转化为图片

    一,将图片序列转化为视频文件 [cpp] view plain copy

  6. opencv把图片序列保存为视频

    opencv把图片序列保存为视频 1,简介 opencv不仅把一段视频抽成一帧一帧的图片,还可以把连续的图片保存为一段视频,可以很方便的满足我们的需求,下面介绍如何把图片序列保存为视频. 2,open ...

  7. 图片序列转换为AVI视频或GIF的方法(MATLAB)

    转换为AVI的代码(MATLAB) framesPath = 'E:\study\biomass\MFiX_Cases\DEMPIC\Analysis postprocess\PRJ DEMPIC_0 ...

  8. blender的动画到底导出图片序列形式还是视频形式

    Blender可以将动画导出为图片序列或视频形式.在Blender中,你可以通过渲染菜单中的"渲染"选项来将动画导出为视频文件,或者通过渲染菜单中的"图像序列" ...

  9. opencv 入门笔记十 图片序列保存为视频

    1.代码: 其中:视频格式设置请看这篇:opencv 入门笔记三(采集视频,保存视频)_Newjet666的博客-CSDN博客 其中:读取图片并画框请看这篇: opencv 入门笔记八 文件夹读取图片 ...

最新文章

  1. 一文看尽各种 NLP 任务
  2. python实战===图片转换为字符的源码(转)
  3. 信息学奥赛一本通(1407:笨小猴)
  4. 手把手教我班小姐姐学java之多态
  5. 搜狐“狐友”正式版上线 扩张我的社交圈
  6. 522. 最长特殊序列 II
  7. HTTP协议抓包分析
  8. OA网站不能正常显示(不能看正文)
  9. python 高斯过程_【Scikit-Learn 中文文档】高斯过程 - 监督学习 - 用户指南 | ApacheCN...
  10. JS 实现blob与base64互转
  11. python 绘图及可视化
  12. vue-element:实现微信表情
  13. python实现去除图片水印
  14. 订单管理_03查询订单信息流程
  15. 外国人入境日本 后天起须留指印头像
  16. 大地坐标与空间直角坐标系的相互转化
  17. Win7更换锁屏壁纸
  18. apikey、apisecret在api请求中的使用
  19. KONG网关 — KongA管理UI使用
  20. java开心消消乐代码_Java小项目之:教你做开心消消乐!

热门文章

  1. apache做tomcat的反向代理,并实现tomcat的会话共享
  2. 内存还剩余很多,却使用 swap 分区
  3. 使用PostgREST的RestAPI操作PostgreSQL数据库教程
  4. Java Singleton类中的线程安全性的示例代码
  5. OSPF——多区域概念及配置、ABR简介、ASBR简介、路由重分发
  6. Android BGradualProgress 多种渐变、直角or弧角、进度条、加载条
  7. DOTNET Core MVC(二)路由初探
  8. 04737 c++ 自学考试2019版 第二章课后程序设计题 2
  9. Docker Compose配置springboot微服务项目
  10. 大数据 Hive spark Flink 关系