转换之间的图像序列和视频
转换之间的视频文件和图像文件序列使用VideoReader
而且VideoWriter
.
示例文件名为shuttle.avi
包含121帧。使用将帧转换为图像文件VideoReader
和imwrite
函数。然后,将图像文件转换为AVI文件使用VideoWriter
.
设置
创建一个临时工作文件夹来存储图像序列。
workingDir = tempname;mkdir (workingDir) mkdir (workingDir,“图片”)
创建VideoReader
创建一个VideoReader
用于从文件中读取帧。
shuttleVideo =视频阅读器(“shuttle.avi”);
创建图像序列
循环视频,将每一帧读入一个名为img
.将每个图像写入一个格式中带有名称的JPEG文件imgN.jpg
,其中N为帧号。
| img001.jpg |
| img002.jpg |
| |…
| img121.jpg |
Ii = 1;而hasFrame(shuttleVideo) img = readFrame(shuttleVideo);文件名= [sprintf(' % 03 d ',(二)“jpg”];fullname = fullfile(workingDir,“图片”文件名);fullname imwrite (img)写入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 {2}));writeVideo (outputVideo img)结束
最终确定视频文件。
关上(outputVideo)
观看最终视频
构造一个reader对象。
shutleavi = videereader (fullfile(workingDir,“shuttle_out.avi”));
从视频帧创建一个MATLAB®电影结构。
Ii = 1;而hasFrame(shuttleAvi) mov(ii) = im2frame(readFrame(shuttleAvi));Ii = Ii +1;结束
根据视频的宽度和高度调整当前图形和轴的大小,并查看电影的第一帧。
图imshow (mov .cdata (1),“边界”,“紧”)
以视频的帧率回放一次电影。
电影(mov 1 shuttleAvi.FrameRate)
学分
美国宇航局提供的航天飞机视频。