首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在matlab中创建视频的方法

在matlab中创建视频的方法
EN

Stack Overflow用户
提问于 2012-06-15 21:10:52
回答 4查看 64.8K关注 0票数 29

在Matlab中创建视频的可能性是什么?我正在搜索,发现主要有3个工具箱,在这个领域工作,图像处理,图像采集和控制视觉…但是没有他们,我怎么能做到,仅仅是从头开始创建视频呢?我对各种概述的方法很感兴趣,但我无法在互联网上找到任何像样的教程或一致的信息来源。

谢谢你的帮助!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-06-15 23:52:03

以下是在(核心) MATLAB中创建电影的一些不同方法。

MOVIE2AVI

(已弃用,请改用VIDEOWRITER )

代码语言:javascript
复制
%# figure
figure, set(gcf, 'Color','white')
Z = peaks; surf(Z);  axis tight
set(gca, 'nextplot','replacechildren', 'Visible','off');

%# preallocate
nFrames = 20;
mov(1:nFrames) = struct('cdata',[], 'colormap',[]);

%# create movie
for k=1:nFrames
   surf(sin(2*pi*k/20)*Z, Z)
   mov(k) = getframe(gca);
end
close(gcf)

%# save as AVI file, and open it using system video player
movie2avi(mov, 'myPeaks1.avi', 'compression','None', 'fps',10);
winopen('myPeaks1.avi')

AVIFILE

(已弃用,请改用VIDEOWRITER )

代码语言:javascript
复制
%# figure
figure, set(gcf, 'Color','white')
Z = peaks; surf(Z);  axis tight
set(gca, 'nextplot','replacechildren', 'Visible','off');

%# create AVI object
nFrames = 20;
aviobj = avifile('myPeaks2.avi', 'fps',10);

%# create movie
for k=1:nFrames
   surf(sin(2*pi*k/20)*Z, Z)
   aviobj = addframe(aviobj, getframe(gca));
end
close(gcf)

%# save as AVI file, and open it using system video player
aviobj = close(aviobj);
winopen('myPeaks2.avi')

视频编写器

代码语言:javascript
复制
%# figure
figure, set(gcf, 'Color','white')
Z = peaks; surf(Z);  axis tight
set(gca, 'nextplot','replacechildren', 'Visible','off');

%# create AVI object
nFrames = 20;
vidObj = VideoWriter('myPeaks3.avi');
vidObj.Quality = 100;
vidObj.FrameRate = 10;
open(vidObj);

%# create movie
for k=1:nFrames
   surf(sin(2*pi*k/20)*Z, Z)
   writeVideo(vidObj, getframe(gca));
end
close(gcf)

%# save as AVI file, and open it using system video player
close(vidObj);
winopen('myPeaks3.avi')

IMWRITE

(从技术上讲,这不是一部电影,而是一个动画GIF图像)

代码语言:javascript
复制
%# figure
figure, set(gcf, 'Color','white')
Z = peaks; surf(Z);  axis tight
set(gca, 'nextplot','replacechildren', 'Visible','off');

%# preallocate
nFrames = 20;
f = getframe(gca);
[f,map] = rgb2ind(f.cdata, 256, 'nodither');
mov = repmat(f, [1 1 1 nFrames]);

%# create movie
for k=1:nFrames
    surf(sin(2*pi*k/20)*Z, Z)
    f = getframe(gca);
    mov(:,:,1,k) = rgb2ind(f.cdata, map, 'nodither');
end
close(gcf)

%# create GIF and open
imwrite(mov, map, 'myPeaks4.gif', 'DelayTime',0, 'LoopCount',inf)
winopen('myPeaks4.gif')
票数 49
EN

Stack Overflow用户

发布于 2012-06-15 21:20:28

有一个http://www.mathworks.de/help/techdoc/ref/videowriterclass.html

我的方法是使用print函数将单帧/图形打印为png文件,并为其指定文件名,如1.png, 2.png, ...,然后使用免费的FFMPEG转换器制作视频。

ffmpeg -r 20 -i %d.png foo.avi

当涉及到转换的参数(比特率、编解码器、几何图形等)时,这允许进行大量的微调。

票数 11
EN

Stack Overflow用户

发布于 2012-06-15 23:26:32

Matlab有一个内置的“电影”命令来播放电影。我发现它很容易使用。我在剧情上使用它来显示时间的变化,以及用单个图像来制作一部真正的电影。

http://www.mathworks.com/help/techdoc/ref/movie.html

我相信一般的程序是:

代码语言:javascript
复制
for ii=1:100
   plot(something(ii))
   F = getframe;
end
movie(F)

要保存影片,可以使用与上面类似的过程,但使用

代码语言:javascript
复制
writeVideo

命令。

http://www.mathworks.com/help/techdoc/ref/videowriterclass.html

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11051307

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档