1. 程式人生 > >把多幀圖片合成為視訊

把多幀圖片合成為視訊

% function im2mov(picfrom,picend,picformat,aviname)
%把圖片集合成一段avi視訊
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 施雲濤 2009年01月08日
% 使用avifile、addframe、getframe等函式實現
% 輸入:
%      picfrom起始位置
%      picend終止位置
%      picformat圖片格式,以字元輸入
%      aviname生成avi的名字,必須帶字尾名,以字元輸入
%輸出:當前目錄下,名字為aviname的視訊檔案
%備註:所有圖片的大小必須與第一次輸入的大小一致
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
picfrom=1; picend=580; picformat='jpg'; aviname='e.avi';
%獲得圖片格式,picfrom表示從哪張圖片開始,picend是圖片幀數,picformat代表圖片格式,aviname表示生成的avi的檔名
picname=strcat('C:\Users\lx\Desktop\腦洞\1out\*.',picformat);
%寫入相應的資料夾地址
%顯示該目錄下的該圖片格式的所有圖片,此處如使用ls,ls所得的結果是字元陣列,對下一步無法更好操作
picname=dir(picname);
picend=length(picname);
%使用avifile,可進行很多引數的設定修改
aviobj = avifile(aviname);
% aviobj = avifile('test.avi')
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%可調整的引數
% Adjustable parameters:
%                Fps: 15.0000
%        Compression: 'Indeo5'
%            Quality: 75
%     KeyFramePerSec: 2.1429
%          VideoName: 'test.avi'
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%
%%自動獲得的引數
% Automatically updated parameters:
%         Filename: 'test.avi'
%      TotalFrames: 0
%            Width: 0
%           Height: 0
%           Length: 0
%        ImageType: 'Unknown'
%     CurrentState: 'Open'
%%%%%%%%%%%%%%%%%%%%%%%
aviobj.Quality = 100;  
%設定質量為100
aviobj.Fps = 29;
%設定幀數為29幀每秒
% aviobj.compression='';
%使用addframe把圖片寫入視訊
for i=picend:-1:picfrom
    %picdata=imread(strcat('C:\Users\lx\Desktop\腦洞\1out\',picname(i,1).name));
    picdata=imread(strcat('C:\Users\lx\Desktop\腦洞\1out\',[num2str(i),'.jpg']));
%以上是兩種讀檔案的情況,如果所有的圖片都是按照順序排列的,檔名不規律,那麼用第一種,如果你的每一幀取名為1,2,3……以此類推,那麼因為按照第一種方式讀檔案會讀1,10,101這樣,所以應該用第二行的程式碼來讀圖片
    aviobj=addframe(aviobj,uint8(picdata));
end
aviobj=close(aviobj);