图像序列与视频之间的转换 |
您所在的位置:网站首页 › 视频转化为avi › 图像序列与视频之间的转换 |
设置 创建一个用于存储图像序列的临时工作文件夹。 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)感谢感谢 NASA 提供的航天飞机视频。 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |