在图像序列和视频之间转换
使用视频文件和图像文件序列进行转换录像师
和VideOwriter
。
命名的示例文件Shuttle.avi
包含121帧。使用帧转换为图像文件录像师
和imwrite
功能。然后,使用图像文件将图像文件转换为AVI文件VideOwriter
。
设置
创建一个临时工作文件夹以存储图像序列。
workingDir = tempname;Mkdir(WorkingDir)Mkdir(WorkingDir,'图片')
创建录像带
创建一个录像师
用于从文件中读取帧。
ShuttleVideo = videoreader('Shuttle.avi');
创建图像序列
通过视频循环,将每个帧读取为一个名为by-3阵列的宽度IMG
。将每个图像写入带有表单名称的JPEG文件imgn.jpg
,其中n是帧号。
|img001.jpg |
|img002.jpg |
|... |
|img121.jpg |
II = 1;尽管HasFrame(ShuttleVideo)img = ReadFrame(ShuttleVideo);filename = [sprintf('%03d',ii)'.jpg'];fullname = fullfile(workingdir,'图片',文件名);imwrite(img,fullname)%写入JPEG文件(img1.jpg,img2.jpg等)II = II+1;结尾
查找图像文件名
在此处查找所有JPEG文件名图片
文件夹。将图像名称集转换为单元格数组。
ImagEnames = dir(fullfile(WorkingDir,'图片',,,,'*.jpg');ImagEnames = {ImagEnames.name}';
用图像序列创建新视频
构造VideOwriter
对象,默认情况下会创建Motion-jpeg Avi文件。
outputVideo = videOwriter(fullfile(workingdir,,'Shuttle_out.avi');outputVideo.Framerate = ShuttleVideo.Framerate;打开(outputVideo)
循环遍历图像序列,加载每个图像,然后将其写入视频。
为了II = 1:长度(ImagEnames)img = imread(fullfile(WorkingDir,,'图片',ImageNames {II}));writeVideo(outputVideo,img)结尾
最终确定视频文件。
关闭(outputVideo)
查看最终视频
构建一个阅读器对象。
shuttleavi = videoreader(fullfile(WorkingDir,,'Shuttle_out.avi');
通过视频帧创建MATLAB®电影结构。
II = 1;尽管hasframe(shuttleavi)mov(ii)= im2frame(readframe(shuttleavi));II = II+1;结尾
根据视频的宽度和高度调整当前图和轴的大小,并查看电影的第一帧。
图IMShow(MOV(1).CDATA,'边界',,,,'紧的')
以视频的框架速率播放电影一次。
电影(Mov,1,Shuttleavi.Framerate)
学分
NASA提供的航天飞机的视频。