在matlab怎么实现图像序列与视频之间的转换
1、设置
创建一个临时工作文件夹来存储图像序列。
命令行键入:
workingDir = tempname;
mkdir(workingDir)
mkdir(workingDir,'images')
2、创建视频阅读器
创建一个视频阅读器,用于从文件中读取帧。
命令行键入:
shuttleVideo = VideoReader('shuttle.avi');
3、创建图像序列
循环播放视频,将每一帧都读取为一个名为img的3倍宽数组。
将每幅图像写入一个名为imgN.jpg的JPEG文件,其中N是帧号。
命令行键入:
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
4、查找图像文件名
查找图像文件夹中的所有JPEG文件名。
将图像名称集转换为单元格数组。
命令行键入:
imageNames = dir(fullfile(workingDir,'images','*.jpg'));
imageNames = {imageNames.name}';
5、使用图像序列创建新视频
构造一个视频编写器对象,默认情况下创建一个Motion-JPEG AVI文件。
命令行键入:
outputVideo = VideoWriter(fullfile(workingDir,'shuttle_out.avi'));
outputVideo.FrameRate = shuttleVideo.FrameRate;
open(outputVideo)
6、循环遍历图像序列,加载每个图像,然后将其写入视频。
命令行键入:
for ii = 1:length(imageNames)
img = imread(fullfile(workingDir,'images',imageNames{ii}));
writeVideo(outputVideo,img)
end
7、最终确定视频文件。
命令行键入:
close(outputVideo)
8、查看最终视频
构造读者对象。
命令行键入:
shuttleAvi = VideoReader(fullfile(workingDir,'shuttle_out.avi'));
9、从视频帧创建一个MATLAB电影结构。
命令行键入:
ii = 1;
while hasFrame(shuttleAvi)
mov(ii) = im2frame(readFrame(shuttleAvi));
ii = ii+1;
end
10、根据视频的宽度和高度调整当前图形和轴的大小,并查看电影的第一帧。
命令行降入:
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
11、按“Enter”键。
如图1所示。

12、以视频的帧速率回放电影一次。
命令行键入:
movie(mov,1,shuttleAvi.FrameRate)
13、按“Enter”键。
如图2所示。