matlab 制作gif動畫


使用matlab制作一個n幀的gif動畫 示意程序

for i = 1:nFrames
 
    % draw stuff
 
    frame = getframe(gcf);
    img =  frame2im(frame);
    [img,cmap] = rgb2ind(img,256);
    if i == 1
        imwrite(img,cmap,'animation.gif','gif','LoopCount',Inf,'DelayTime',1);
    else
        imwrite(img,cmap,'animation.gif','gif','WriteMode','append','DelayTime',1);
    end
end

Step1:捕獲當前圖窗並生成索引圖像

frame=getframe(gcf)是捕獲當前圖窗作為影片幀,frame是一個結構體,包含cdata和colormap

cdata是一個存放真彩色圖像數據的矩陣,大小為M*N*3

當cdata存放真彩色圖像時,colormap=[]

img=frame2im(frame)是將捕獲的影片幀轉換為圖像數據,img為真彩色圖像,即從結構體frame中提取出的cdata

因為 不支持將真彩圖像寫入GIF文件,所以應調用 rgb2ind, 將圖像中的 RGB 真彩圖像數據轉換為索引圖像

[X,cmap] = rgb2ind(RGB,Q) 使用具有 Q 種量化顏色的最小方差量化法並加入抖動,將 RGB 圖像轉換為索引圖像 X,關聯顏色圖為 cmap。

索引圖象X矩陣大小為M*N

Step2:調用imwrite函數將索引圖像寫入gif文件中

語法:imwrite(索引圖象,索引圖象顏色圖,'gif文件名','gif',名稱-值對組參數)

名稱-值對組參數

指定可選的、以逗號分隔的 Name,Value 對組參數。Name 為參數名稱,Value 為對應的值。Name 必須放在引號中。您可采用任意順序指定多個名稱-值對組參數

以下是本程序使用到的名稱-值對組參數

'DelayTime' - 顯示下一個圖像之前的時滯

顯示下一個圖像之前的時滯(秒),指定為逗號分隔的對組,包含 'DelayTime' 和范圍 [0,655] 內的標量值。0 的值以硬件允許的最快速度顯示圖像

'LoopCount' - 重復動畫的次數

重復動畫的次數,指定為以逗號分隔的對組,包含 'LoopCount' 和 [0,65535] 范圍內的整數或 Inf 值。如果指定 0,動畫將播放一次。如果指定值 1,動畫將播放兩次,以此類推。Inf 的 LoopCount 值可使動畫連續循環

'WriteMode' - 寫入模式

寫入模式,指定為逗號分隔的對組,包含 'WriteMode' 和 'overwrite' 或 'append'。在 overwrite 模式下,imwrite 覆蓋現有文件 filename。在 append 模式下,imwrite 會向現有文件添加單個幀。

相關知識:

MATLAB有三種基本的圖像類型:
Truecolor(真彩色圖像)——數碼相機的格式,廣泛用於計算機圖形。
Indexed (索引圖象)和 scaled indexed (比例索引圖象)——經常用來顯示科學或者工程數據

真彩色圖像

在這種格式的圖里,每一個像素由三個數字表示:紅,綠,藍,整個圖形由一個M-N-3的三維矩陣表達。圖形顯示函數和圖形處理工具箱將這種矩陣視為一個truecolor圖形

矩陣值直接指定了每一個像素的顏色。通過這種表達方式你可以很大程度上控制顏色顯示,但是對於工程應用來說它並不是最適合的一種圖形格式。

索引圖像

為了解決彩色圖像消耗空間大的問題,一般應用於色彩構成比較簡單的場景,索引圖像包括一個數據矩陣X,一個顏色映像矩陣Map。像素顏色由數據矩陣X作為索引指向矩陣Map進行索引。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM