当前位置: 首页 > news >正文

视频与图片序列之间的互相转换

将视频转换成图片时可以用VideoReader和imwrite函数;将图片序列转换成视频时使用VideoWriter函数。这里是一个matlab的demo程序。详细可见:
【https://cn.mathworks.com/help/matlab/examples/convert-between-image-sequences-and-video.html】

%建立一个临时目录用于存放图片序列
workingDir = tempname;
mkdir(workingDir)
mkdir(workingDir,'images')

%建立VideoReader用于从文件中读取图像帧
shuttleVideo = VideoReader('shuttle.avi');

ii = 1;

while hasFrame(shuttleVideo)
    img = readFrame(shuttleVideo);
    filename = [sprintf('%03d',ii) '.jpg'];
    fullname = fullfile(workingDir,'images',filename);
    imwrite(img,fullname)    % Write out to a JPEG file (img1.jpg, img2.jpg, etc.)
    ii = ii+1;
end

%找到文件夹下.jpg结尾的图像并将图像名字存在imageNames cell
imageNames = dir(fullfile(workingDir,'images','*.jpg'));
imageNames = {imageNames.name}';  %省去循环的操作

%建立VideoWriter目标用于存放AVI视频
outputVideo = VideoWriter(fullfile(workingDir,'shuttle_out.avi'));
outputVideo.FrameRate = shuttleVideo.FrameRate;
open(outputVideo)

for ii = 1:length(imageNames)
    img = imread(fullfile(workingDir,'images',imageNames{ii}));
    writeVideo(outputVideo,img)
end

close(outputVideo)
shuttleAvi = VideoReader(fullfile(workingDir,'shuttle_out.avi'));

%建立一个movie结构将图片转化成movie frame
ii = 1;
while hasFrame(shuttleAvi)
    mov(ii) = im2frame(readFrame(shuttleAvi));
    ii = ii+1;
end

% 显示第一帧
f = figure;
f.Position = [150 150 shuttleAvi.Width shuttleAvi.Height];

ax = gca;
ax.Units = 'pixels';
ax.Position = [0 0 shuttleAvi.Width shuttleAvi.Height];
image(mov(1).cdata,'Parent',ax)
axis off

% 播放movie
movie(mov,1,shuttleAvi.FrameRate)


相关文章:

  • Matlab将视频分段截取
  • 视觉显著性检测技术主要研究组
  • 巧妙使用cmd和xls批量重命名文件
  • 很有用的cv牛人的网址和主要贡献
  • 儿童学编程
  • 我的python学习
  • windows下使用wget下载文件夹
  • Windows系统下onedrive文件夹名字过长且包含空格解决方案
  • Cuda中的cuda_Malloc函数
  • CUDA的纹理内存讲解
  • 指针游戏1 最简单的指针游戏
  • 指针游戏2 传递地址的指针
  • CUDA Handbook 补充 CPU和GPU硬件架构1
  • CUDA Handbook 补充 CPU和GPU硬件架构2
  • CUDA Handbook 补充 CPU和GPU硬件架构3
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • C# 免费离线人脸识别 2.0 Demo
  • iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码...
  • javascript 哈希表
  • laravel5.5 视图共享数据
  • orm2 中文文档 3.1 模型属性
  • Python - 闭包Closure
  • Python学习笔记 字符串拼接
  • Redis 中的布隆过滤器
  • swift基础之_对象 实例方法 对象方法。
  • 番外篇1:在Windows环境下安装JDK
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 记一次和乔布斯合作最难忘的经历
  • 我有几个粽子,和一个故事
  • 赢得Docker挑战最佳实践
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • ​html.parser --- 简单的 HTML 和 XHTML 解析器​
  • ​Linux·i2c驱动架构​
  • ​如何在iOS手机上查看应用日志
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • (编译到47%失败)to be deleted
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (附源码)ssm捐赠救助系统 毕业设计 060945
  • (论文阅读23/100)Hierarchical Convolutional Features for Visual Tracking
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (篇九)MySQL常用内置函数
  • (三) diretfbrc详解
  • (四)库存超卖案例实战——优化redis分布式锁
  • (转)淘淘商城系列——使用Spring来管理Redis单机版和集群版
  • (转)真正的中国天气api接口xml,json(求加精) ...
  • ******之网络***——物理***
  • .md即markdown文件的基本常用编写语法
  • .NET CLR基本术语
  • .NET Core 版本不支持的问题
  • .NET Core 网络数据采集 -- 使用AngleSharp做html解析
  • .NET6 开发一个检查某些状态持续多长时间的类
  • .NET建议使用的大小写命名原则
  • .NET连接MongoDB数据库实例教程
  • .net图片验证码生成、点击刷新及验证输入是否正确