1. 程式人生 > >matlab製作及生成avi,gif動畫

matlab製作及生成avi,gif動畫

一、動畫的製作
Matlab中動畫實現的方法主要有下面三種
1.電影動畫:從不同的視角拍下一系列物件的圖形,並儲存到變數中,然後按照一定的順序像電影一樣播放。
http://www.matlabsky.com/thread-593-1-1.html

%錄製電影動畫
for j=1:n
%
%這裡輸入我們的繪圖命令
%
M(j) = getframe;
end
movie(M)
%單幀顯示方法
f = getframe(gcf);
colormap(f.colormap);
image(f.cdata);

2.擦除動畫:畫在圖形視窗中按照一定的演算法連續擦除和重繪圖形物件,表現為動畫,這個也是MATLAB中使用最多的方法。


http://www.matlabsky.com/thread-240-1-1.html

%擦除重繪模式動畫
%選擇一個擦除模式
set(h,'erasemode',erasemode)%h是需要執行動畫影象的控制代碼,一般都是由line或者plot建立
%
%需要執行一些圖形計算命令
%
%迴圈語句中更新座標資料,一般使用for或者while
for i=1:n
%
%必要的MATLAB命令
%
set(h,'xdata',xdata,'ydta',ydata)%更新影象的座標資料
drownnow%重新整理螢幕
%
%其它Matlab語句
%
end
3.質點動畫:用comet()等函式繪製彗星圖,它能演示一個質點的運動


http://www.matlabsky.com/thread-594-1-1.html
comet(xdata,ydata,p)
p是指彗星的尾巴的長度,可以是常數或者size(x)大小的向量
二、動畫的儲存
下面再講述下生成的動畫如何儲存。
http://www.matlabsky.com/thread-595-1-1.html

MATLAB動畫儲存只對電影動畫有意義,因為其他兩種都是實時動畫,一眨眼過去了,而電影動畫是先將動畫一幀一幀的儲存下來,在使用movie函式播放。它的好處是,執行一次MATLAB程式就可以播放無數次,只要你的幀資料還在。
但是這還是不方便,由於它沒法脫離MATLAB環境,很討厭。還好MATLAB為我們提供了movie2avi函式,它可以把動畫直接轉換成avi檔案,而avi檔案則可以脫離Matalb環境而在其他地方運行了。

1:儲存成avi檔案

幾個必要的函式:

AVIFILE Create a new AVI file
AVIOBJ = AVIFILE(FILENAME) creates an AVIFILE object AVIOBJ with the
default parameter values. If FILENAME does not include an extension,
then '.avi' will be used. Use AVIFILE/CLOSE to close the file opened by
AVIFILE. Use "clear mex" to close all open AVI files.

GETFRAME Get movie frame.
GETFRAME returns a movie frame. The frame is a snapshot
of the current axis. GETFRAME is usually used in a FOR loop
to assemble an array of movie frames for playback using MOVIE.
For example:
for j=1:n
plot_command
M(j) = getframe;
end
movie(M)
GETFRAME(H) gets a frame from object H, where H is a handle
to a figure or an axis.

ADDFRAME Add video frame to AVI file.
AVIOBJ = ADDFRAME(AVIOBJ,FRAME) appends the data in FRAME to AVIOBJ,
which is created with AVIFILE.

例子:

--------------------------------------------------------------------------------------------

clc;
clear;
fig=figure;
aviobj=avifile('example.avi');
n=50;
x=0:pi/n:2*pi;
y=sin(x);
k=0;
for t=0:pi/n:2*pi
k=k+1;
x(k)=t;
y(k)=sin(t);
H=plot(x,y,x(k),y(k),'or');
grid
MOV=getframe(fig);
aviobj=addframe(aviobj,MOV);
end
close(fig)
aviobj=close(aviobj)

--------------------------------------------------------------------------------------------

2:直接儲存gif動畫
%%%構造gif影象的幀,
nn=getframe(gcf);
%%轉換為可以直接輸出的格式(這會使影象丟失)
%如果要製作彩色的影象,你只能把生成的彩色影象單獨製作(使用其他軟體)
im=frame2im(nn);
[I,map]=rgb2ind(im,256);

if i1==1

imwrite(I,map,'out.gif','gif','loopcount',inf)

else

imwrite(I,map,'out.gif','gif','writemode','apend')

end

幾個必要的函式:

figure屬性:

屬性名:NextPlot
屬性值:new | {add} | replace | replacechildren
釋義: How to add next plot.

Determines which figure MATLAB uses to display graphics output. If the value of the current figure is:
new — Create a new figure to display graphics (unless an existing parent is specified in the graphing function as a property/value pair).
add — Use the current figure to display graphics (the default).
replace — Reset all figure properties except Position to their defaults and delete all figure children before displaying graphics (equivalent to clf reset).
replacechildren — Remove all child objects, but do not reset figure properties (equivalent to clf).
The newplot function provides an easy way to handle the NextPlot property. For more information, see the axes NextPlot property and Controlling Graphics Output.

FRAME2IMReturn image data associated with movie frame.
[X,MAP] = FRAME2IM(F) returns the indexed image X and associated
colormap MAP from the single movie frame F.

RGB2INDConvert RGB image to indexed image.
RGB2IND converts RGB images to indexed images using one of three different methods: uniform quantization, minimum variance quantization,and colormap approximation. RGB2IND dithers the image unless you specify 'nodither' for DITHER_OPTION.
[X,MAP] = RGB2IND(RGB,N) converts the RGB image to an indexed image X using minimum variance quantization. MAP contains at most N colors. N must be <= 65536.
[...] = RGB2IND(...,DITHER_OPTION) enables or disables dithering. DITHER_OPTION is a string that can have one of these values:
'dither' dithers, if necessary, to achieve better color
resolution at the expense of spatial
resolution (default)
'nodither' maps each color in the original image to the
closest color in the new map. No dithering is
performed.
Example
-------
RGB = imread('ngc6543a.jpg');
[X,map] = rgb2ind(RGB,128);
figure, image(X), colormap(map)
axis off
axis image

例子:

--------------------------------------------------------------------------------------------

Z = peaks;
surf(Z)
axis tight
set(gca,'nextplot','replacechildren','visible','off')
f = getframe;
[im,map] = rgb2ind(f.cdata,256,'nodither');
im(1,1,1,20) = 0;
for k = 1:20
surf(cos(2*pi*k/20)*Z,Z)
f = getframe;
im(:,:,1,k) = rgb2ind(f.cdata,map,'nodither');
end
imwrite(im,map,'DancingPeaks.gif','DelayTime',0,'LoopCount',inf)
--------------------------------------------------------------------------------------------

或者:

Z = peaks;

surf(Z)
axis tight

Zl=zlim;
for k = 1:20
surf(cos(2*pi*k/20)*Z,Z)

zlim(Zl);
f = getframe;
im=frame2im(f);
[I,map] = rgb2ind(im,256);
if k==1
imwrite(I,map,'out.gif','gif','loopcount',inf,'Delaytime',0.02)
else
imwrite(I,map,'out.gif','gif','writemode','append','Delaytime',0.02)
end
end
--------------------------------------------------------------------------------------------

對圖片進行旋轉時,影象大小改變的處理辦法:

如下面的程式:

如果沒有set(gcf,'units','normalized','position',[0.3 0.2 0.4 0.3])這一句時,則影象的大小會隨著角度的改變而改變(讀者可以自己試下)。

改變的方法很簡單,就是在第一次做完圖後,在動畫之前,將上面這句貼上去。

lat0=-90:90;
long0=-180:179;
dv=randn(length(lat0),length(long0))*0.1+sin(repmat(lat0',1,length(long0))/180*2*pi);
% % plotting
figure
sphere;
h = findobj(gcf, 'Type', 'surface');
set(h, 'CData', dv, 'FaceColor', 'texturemap')
axis equal;
ylabel('long = -180')
axis image off
c1=colormap;
set(gcf,'colormap',flipud(c1));
colorbar
set(gcf,'units','normalized','position',[0.3 0.2 0.4 0.3])
for i1=0:30:360
view(i1,0)
drawnow
end

另外還有一個簡單的辦法:

在繪圖後,加上axis vis3d便可保證大小不變了.

AXIS VIS3D freezes aspect ratio properties to enable rotation of
3-D objects and overrides stretch-to-fill

如下面的例子:

lat0=-90:90;
long0=-180:179;
dv=randn(length(lat0),length(long0))*0.1+sin(repmat(lat0',1,length(long0))/180*2*pi);
% % plotting
figure
sphere;
h = findobj(gcf, 'Type', 'surface');
set(h, 'CData', dv, 'FaceColor', 'texturemap')
axis equal;
ylabel('long = -180')
axis image off
c1=colormap;
set(gcf,'colormap',flipud(c1));
colorbar
axis vis3d
for i1=0:30:360
view(i1,0);
drawnow
end

相關推薦

matlab製作生成avigif動畫

一、動畫的製作 Matlab中動畫實現的方法主要有下面三種1.電影動畫:從不同的視角拍下一系列物件的圖形,並儲存到變數中,然後按照一定的順序像電影一樣播放。 http://www.matlabsky.com/thread-593-1-1.html %錄製電影動畫 for j=1:n % %這裡輸入我們的繪

製作GIF動畫簡單教程製作GIF動畫簡單方法

GIF動畫在QQ和微信聊天中我們經常需要用到(你們肯定都鬥過圖)。那麼我們如何製作GIF動畫呢?製作GIF動畫又有哪些簡單的方法呢?下面小編就來分享給大家,教大家如何使用迅捷GIF製作工具製作GIF動畫。   迅捷GIF製作工具http://www.xunjieshipin.com/d

怎麽制作GIF動態圖在線GIF動畫制作工具哪個好

img 技術 工具制作 png 彈出 需要 輕松 watermark 全部 貼吧聊天中,我們經常會使用到GIF動態圖片,看著吧裏那些各式各樣的GIF動態圖,難免都想自己親手制作一張,那麽如何錄制GIF動態圖片呢?其實制作gif動態圖片還是比較容易得,有一款迅捷GIF制作工具

效果使用css3動畫製作但是動畫會導致頁面抖動閃屏

2、問題原因 效果使用css3動畫製作,但是動畫會導致頁面抖動閃屏 3、解決方案 使用到動畫的樣式設定如下樣式,可解決 -webkit-backface-visibility: hidden;(設定進行轉換的元素的背面在面對使用者時是否可見:隱藏) // 如果有3d加上下面句 ,沒有可省略 -webk

laravel-admin自動生成模組相關基礎配置

一、模型建立、資料遷移、以及關聯模型控制器 $ php artisan make:model Brand -m  //建立模型並生成遷移檔案 $ php artisan migrate  //執行遷移 $ php artisan admin:make BrandController --

進度條製作-GIF動畫

網頁進度條製作 一、為什麼需要網頁進度條 隨著HTML的普及,各種CSS3動畫及特效在網頁中層出不窮,PC端載入資料的速度還算可以,移動端相對要慢很多,如果圖片或指令碼沒有完全載入,使用者在操作中可能發生各種問題,因此我們需要對載入資料進行檢測,以更加人性化的方式給使用者展現。

【PS教程】製作逼真下雨GIF動畫效果

有不少小夥伴都想知道該怎麼製作逼真下雨GIF動畫效果,今天小編為大家帶來了用ps製作下雨動態圖片完整版詳細教程,如果你想知道該怎麼製作就快來看看吧!學會之後自己就可以輕鬆製作逼真下雨GIF動畫效果了! Adobe Photoshop CC 2018 for Mac(ps mac破解版)附啟用工具

怎麼製作QQ動態表情包GIF出處是哪

現在不管是聊天還是看視訊,都少不了gif動圖,製作gif動圖的軟體也越來越多,但是我們平時使用的GIF一般都是別人製作好的,有沒有想自己製作GIF的衝動呢?那怎麼製作QQ動態表情包,GIF出處是哪?今天帶大家一起看一看吧! 1.第一步,在百度框搜尋GIF製作工具,會出現很多不同品牌的製作工具,為了節省大

如何製作QQ動態表情包GIF製作軟體哪個好

QQ聊天時,GIF動態表情包,是我們經常所用的一個氣氛調和劑,常常一個動態表情包,就能讓我們彼此之間心照不宣的立即對方的意思,今天小編所說的便是教大家如何製作這個GIF動態表情包,其實製作GIF表情包並不難,有款迅捷GIF製作工具就足夠了,下面便分享與大家。  

Echarts使用之——根據篩選條件動態生成圖表聯動easyui(問題解決)

 兩三個月前第一次開發的時候,不想今天便出現了一些小問題,回想起來由於時間比較趕,確實不夠健壯,不夠美觀,體驗稍差,整體如下: 重點1:根據篩選條件動態生成圖表 重點2:根據提示框,聯動下面的easyui表格進行實時更新顯示 其他遇到其他相關小問題和解決 注意事項:

視訊轉gif 如何將視訊製作gif動畫圖片

  在微信聊天的時候,經常使用動態表情包的大家肯定不難發現,很多動圖是用網上的綜藝節目或電視劇電影中的某個搞笑片段製作成的。我們聊天用的很多表情包都存在雷同的現象,要是大家都用相同的表情包那就太沒意思了,想要一款獨特的表情包要怎麼製作呢?既然很多動圖是用視訊片段製作的,那麼我

go實現橢圓曲線加解密、簽名驗證演算法(go ecdsa庫的運用)生成比特幣地址過程講解、base58實現

go實現橢圓曲線加解密、簽名驗證演算法(go ecdsa庫的運用),及生成比特幣地址過程講解、BASE58實現 前言 本文主要講解使用Go的ecdsa庫實現橢圓曲線加解密、簽名、驗證演算法,同時通過公鑰生成比特幣地址,具體程式碼邏輯參考bitcoin0

java呼叫matlab:一、生成檔案本機呼叫

Java程式碼實現的計算難免會顯得不夠高效。而利用MATLAB寫好相應的計算函式,然後打包成jar包供Java呼叫,在某些情況下會更加方便。或者有些時候會涉及到使用Java呼叫MatLab展現一些二維三

docker dockerFile 引數解釋生成jdk+tomcat映象例項

Dockfile是一種被Docker程式解釋的指令碼,Dockerfile由一條一條的指令組成,每條指令對應Linux下面的一條命令。Docker程式將這些Dockerfile指令翻譯真正的Linux命令。Dockerfile有自己書寫格式和支援的命令,Docker程式解

製作VOC型別資料集生成txt生成lmdb

前言:資料樣式參照PASCALVOC 需要檔案連結:http://pan.baidu.com/s/1gfeHDMN 密碼:o7h0  連結:http://pan.baidu.com/s/1nve53Wd 密碼:jbtt 一:生成txt 1:蒐集圖片,或者視訊資料等,利用標註

.net c# gif動畫如何新增圖片水印實現思路程式碼學習

public static Bitmap WaterMarkWithText(System.Drawing.Bitmap origialGif, string text,string filePath) { //用於存放楨 List<Frame> frames

matlab的檔名字提取刪除字尾

參考 http://blog.csdn.net/uncle_ll/article/details/65632505 http://yongliu2005.blog.163.com/blog/static/2180000642014128816372/ 1、帶字尾

php圖片等比壓縮程式碼支援jpg,png,gif驗證gif動畫

<?php /** * Created by PhpStorm. * User: as * Date: 2016-12-01 * Time: 8:38 */ //圖片壓縮 function ImageCondens($filepase){ list(

根據mysql資料庫自動生成mvc三層程式碼jsp頁極速開發srpingmvc+mybatis+bootstrap專案。

極速開發srpingmvc+mybatis+bootstrap專案 最近開發web總感覺增刪改查,mvc三層重複開發的套路程式碼太多,於是有了一個想法: 能不能一鍵生成增刪改查各層程式碼,於是開發了這個專案。 專案主要的功能:根據mysql資料庫(表和欄位要有

matlab實現視訊的載入各幀的圖片顯示

%這是清除之前空間裡的記憶體變數等等,這個大家應該都知道 fileName='falling.avi'    %這是告訴我們的視訊的名字是什麼,變數的定義大家都懂 obj = VideoReader(fileName);  %看到沒這裡的“VideoReader”就是2015b版本讀取視訊的語句 numFra