matlab图像序列生成,图像序列与视频之间的转换

设置

创建一个用于存储图像序列的临时工作文件夹。

workingDir = tempname;

mkdir(workingDir)

mkdir(workingDir,'images')

创建 VideoReader

创建一个用于从文件中读取帧的 VideoReader。

shuttleVideo = VideoReader('shuttle.avi');

创建图像序列

循环读取视频,将所有帧都读入到名为 img 的一个宽×高×3 的数组中。将每个图像写入一个以 imgN.jpg 格式命名的 JPEG 文件,其中 N 是帧编号。

| img001.jpg|

| img002.jpg|

| ...|

| img121.jpg|

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

查找图像文件名称

找到 images 文件夹中的所有 JPEG 文件名。将这组图像名称转换为元胞数组。

imageNames = dir(fullfile(workingDir,'images','*.jpg'));

imageNames = {imageNames.name}';

使用图像序列创建新视频

构造一个 VideoWriter 对象,默认情况下该对象会创建一个 Motion-JPEG AVI 文件。

outputVideo = VideoWriter(fullfile(workingDir,'shuttle_out.avi'));

outputVideo.FrameRate = shuttleVideo.FrameRate;

open(outputVideo)

循环读取图像序列,加载每个图像,然后将其写入到视频。

for ii = 1:length(imageNames)

img = imread(fullfile(workingDir,'images',imageNames{ii}));

writeVideo(outputVideo,img)

end

最终生成视频文件。

close(outputVideo)

查看最终生成的视频

构造一个 reader 对象。

shuttleAvi = VideoReader(fullfile(workingDir,'shuttle_out.avi'));

根据视频帧创建一个 MATLAB 影片结构体。

ii = 1;

while hasFrame(shuttleAvi)

mov(ii) = im2frame(readFrame(shuttleAvi));

ii = ii+1;

end

基于视频的宽度和高度调整当前图窗及其坐标区的大小,并查看影片的第一帧。

figure

imshow(mov(1).cdata, 'Border', 'tight')

按照视频的帧速率播放影片一次。

movie(mov,1,shuttleAvi.FrameRate)

7a1145572dd0923edab07e3dee25a1fa.png

感谢

感谢 NASA 提供的航天飞机视频。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值