在matlab怎么实现图像序列与视频之间的转换

2025-10-28 15:46:12

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所示。

在matlab怎么实现图像序列与视频之间的转换

12、以视频的帧速率回放电影一次。

命令行键入:

movie(mov,1,shuttleAvi.FrameRate)

13、按“Enter”键。

如图2所示。

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢