在图像和视频序列之间进行转换
转换视频文件和图像文件序列之间使用VideoReader
和VideoWriter
。
样例文件命名shuttle.avi
包含121帧。使用帧转换为图像文件VideoReader
和imwrite
函数。然后,将图像文件转换成一个AVI文件使用VideoWriter
。
设置
创建一个临时工作目录来存储图像序列。
workingDir = tempname;mkdir (workingDir) mkdir (workingDir,“图片”)
创建VideoReader
创建一个VideoReader
用于从文件读取帧。
shuttleVideo = VideoReader (“shuttle.avi”);
创建一个图像序列
循环的视频,阅读每一帧width-by-height-by-3数组命名img
。写出每个图像JPEG文件的名称形式imgN.jpg
,其中N是帧数。
| img001.jpg |
| img002.jpg |
| |…
| img121.jpg |
2 = 1;而hasFrame (shuttleVideo) img = readFrame (shuttleVideo);文件名= [sprintf (' % 03 d ',(二)“jpg”];fullname = fullfile (workingDir,“图片”文件名);fullname imwrite (img)%写出JPEG文件(img1.jpg、img2.jpg等)。2 = 2 + 1;结束
找到图像文件的名字
找到所有的JPEG文件的名称图片
文件夹中。细胞图像的集合名称转换为数组。
imageNames = dir (fullfile (workingDir“图片”,‘* . jpg”));imageNames = {imageNames.name} ';
创建新的视频图像序列
构造一个VideoWriter
对象,该对象默认创建一个jpeg AVI文件。
outputVideo = VideoWriter (fullfile (workingDir“shuttle_out.avi”));outputVideo。帧速率= shuttleVideo.FrameRate;打开(outputVideo)
遍历图像序列,加载每个图像,然后把它写的视频。
为2 = 1:长度(imageNames) img = imread (fullfile (workingDir,“图片”,imageNames {2}));writeVideo (outputVideo img)结束
完成视频文件。
关上(outputVideo)
查看最后的视频
构造一个读者对象。
shuttleAvi = VideoReader (fullfile (workingDir“shuttle_out.avi”));
创建一个MATLAB®电影视频帧的结构。
2 = 1;而hasFrame (shuttleAvi) mov (ii) = im2frame (readFrame (shuttleAvi));2 = 2 + 1;结束
调整当前图和轴基于视频的宽度和高度,并查看第一帧的电影。
图imshow (mov .cdata (1),“边界”,“紧”)
播放电影曾经在视频的帧率。
电影(mov 1 shuttleAvi.FrameRate)
学分
由美国国家航空航天局航天飞机的视频。