从图像制作电影

时间:2016-03-12 03:04:18

标签: matlab

请,我有一个名称(照片)的文件夹,它包含四个名称(Order1,Order2,Order3,Order4)的子文件夹。每个文件夹包含100个图像。我正在尝试为每个子文件夹制作一部电影。我会收到4部电影。我自动使用下面的代码及其从每个文件夹中读取的图像并创建电影并将其保存在同一文件夹中。所以,我有四部电影。在电影期间存在跳跃的问题因此在视频期间在不同时间重复多次图像编号1。我该如何更正代码?或者是否有任何其他代码可以完成这项工作。

startpath = pwd;

for k = 1:4
    folder = fullfile(startpath, 'Photos', sprintf('Order%d', k));
    cd(folder)
    Files = dir('*.jpg');
    NumFiles= size(Files,1);
    Megamind_Images = uint8(zeros([600 1000 3 NumFiles*5]));
    VideoObj = VideoWriter('Create_Video.mp4','MPEG-4');
    VideoObj.FrameRate = 5; 
    VideoObj.Quality   = 80;  
    count=1;
    for i = 1 : NumFiles
        I = imread(Files(i).name);
        ResizeImg = imresize(I,[600 1000]);
        for j = 1 : 5
            Megamind_Images(:,:,:,count)=ResizeImg;
            count = count + 1;
        end
    end
    open(VideoObj);
    writeVideo(VideoObj, Megamind_Images);
    close(VideoObj);
end

1 个答案:

答案 0 :(得分:0)

您可以在结构中保存所需的所有图像,然后将它们转换为帧并播放该帧。 将图像转换为帧你可以使用im2frame命令:

f = im2frame(X,map)将索引图像X和关联的色彩映射图转换为电影帧f。
如果将X指定为m-by-n整数数组,则im2frame将使用关联的colormap map,其中map是范围为[0,1]的三列值数组。每行地图都是一个三元素RGB三元组,用于指定色彩图中单色的红色,绿色和蓝色分量。 如果将X指定为m-by-by-by-3真彩色图像,则map是可选的,无效。

如果X包含索引图像,

f = im2frame(X)会将索引图像X转换为使用当前色图的电影帧f。

然后在struct中保存所有帧并播放电影:

F(1) = im2frame(X1,map);
F(2) = im2frame(X2,map);
...
F(n) = im2frame(Xn,map);
movie(F)