MATLAB:使用writeVideo制作视频

时间:2013-04-11 14:12:09

标签: matlab matlab-guide

我目前正在尝试使用MATLAB中的writeVideo函数制作视频。我使用GUIDE制作了一个GUI,其中包括一个滑块,一些复选框和一个单独的轴(标记为axes1)。当我移动滑块时,轴将绘制某些根据滑块值而变化的形状。

我要做的是记录用于在演示文稿中显示功能的GUI视频。但是,当我播放视频时(在使用writeVideo制作之后),它会显示滑块值移动并正确检查复选框,但绘图永远不会改变(即它只显示原始形状)。这似乎是一些刷新错误,但是,我尝试过的任何东西都没有用(刷新,绘制等)。

知道为什么会这样吗?以下是我试图实现的代码:

vidObj = VideoWriter('test.avi','Motion JPEG AVI');
open(vidObj);
flag = 0;
if flag<12 %movie will be 12 frames long
    flag = flag+1;
    if slider<1  
        plot something...
    elseif slider>=1 && slider<2
        plot something else...
    etc...
    elseif slider<=5
        plot something else...
    end

    hFigure = findobj('Name','gui');
    currFrame = getframe(hFigure);
    writeVideo(vidObj,currFrame);

    clear hfigure currFrame image;
else
    fprintf('done\n')
    close(vidObj);   
end

如上所述,我可以使用implay来播放test.avi文件,但剧情永远不会更新。

提前致谢

注意:我使用的是MATLAB R2012b

编辑:

以下是我最终创建视频的方式:也许这可以帮助那些面临类似问题的人。

我基本上放弃了使用getframe并决定1)获取屏幕截图,然后2)将屏幕截图变成电影。为了获得截图,我首先运行我的程序然后在命令窗口中使用java工具包调用以下代码

i = 1;
while true
    robo = java.awt.Robot;
    t = java.awt.Toolkit.getDefaultToolkit();

    %# Set screen size
    rectangle = java.awt.Rectangle(0,0,1000,640);

    %# Get the capture
    image = robo.createScreenCapture(rectangle);

    %# Save it to file
    filehandle = java.io.File(sprintf('capture%d.jpg', i));
    javax.imageio.ImageIO.write(image,'jpg',filehandle);

    pause(.4) %# Wait for 0.4 seconds
    i = i + 1;
end

然后继续在后台运行并拍摄屏幕快照并将其存储到当前目录中。要阻止它运行,只需使用Ctrl C.一旦我有屏幕截图,我使用以下代码来创建电影:

vidObj = VideoWriter('test.avi','Motion JPEG AVI');
open(vidObj);
for i=7:87 %these are the frames I wanted in my movie
    x = num2str(i);
    im = horzcat('capture',x);
    im1 = horzcat(im,'.jpg')
    imdata = imread(im1);
    writeVideo(vidObj,imdata);
end
close(vidObj); 

2 个答案:

答案 0 :(得分:1)

getframe有时会出现问题。我不确定我能给出答案,因为我的声誉,我不能简单地发表评论,但这link可能会有所帮助。从GUI获取图形后,将其转换为图像,然后转换为框架。值得一试。

答案 1 :(得分:0)

如果您将显示器设置更改为16位颜色,它将解决您遇到的问题。这已在所提供的链接中记录。我之前的回答被删除了,因为我只提供了链接并告诉你如何解决问题(对不起),但如果你实际点击链接并看到他们说的话或将你的显示器设置改为16位颜色,一切都会有效。从链接中你可以看到人们自2009年以来就遇到过这个问题,但它已于2013年4月更新,因此它仍然是一个问题,将显示器设置更改为16位颜色仍然是一个解决方案。

希望这有帮助!

http://www.mathworks.com/matlabcentral/newsreader/view_thread/257389