1. 程式人生 > >利用matlab將視訊分幀成圖片或將圖片轉成視訊

利用matlab將視訊分幀成圖片或將圖片轉成視訊

前幾日因為寫論文有需要,我必須從視訊裡面提取圖片。n年前,小編當時還是一名小菜之時(雖然現在也還是菜鳥一個),那時總是要到處找一些軟體來實現分幀,但是現在視訊太大了,軟體不能夠一下全部將視訊圖片轉換,而且轉換完所需記憶體太大。加上小編這人總是喜歡玩得high點,因此我就想能不能使用程式讀取一幀,儲存一幀,然後清空呢,再迴圈下去。
答案當然是可以的。平常對影象處理用的多的軟體就是matlab了,今天小編就來和大家講講如何利用matllab 對視訊進行分幀,以後大家對視訊進行分幀或者將一張張圖片整成視訊就可以直接copy使用了
廢話就不多嘮了,來吧,程式走起

每個朋友它的需求總是不一樣的,我還是把單純的視訊分幀程式也給掛出來吧

clc,clear;
     fileName = '1.avi';
    obj = VideoReader(fileName);
     numFrames = obj.NumberOfFrames;% 幀的總數
     for k = 1 : numFrames% 讀取資料
     frame = read(obj,k);
     imshow(frame);%顯示幀
     imwrite(frame,strcat(num2str(k),'.jpg'),'jpg');% 儲存幀
end

下面是時候展現真正的技術了,讀取一張扔一張

clc;
     clear;
      %% 讀取視訊
     video_file='***.avi';       //這裡可以使用昨天小編教大家使用OPENCV自拍的視訊為例哦
     video=VideoReader(video_file);
     frame_number=floor(video.Duration * video.FrameRate);  // 獲取幀數,為下面迴圈準備
     %
% 分離圖片 for i=1:frame_number image_name=strcat('****\', num2str(i)); image_name=strcat(image_name,'.jpg'); I=read(video,i); %讀出圖片 imwrite(I,image_name,'jpg'); %寫圖片 I=[]; end

又有人問到,小編,乾脆也講下如何將一幀幀圖片合成視訊吧。還有人問,小編,怎麼把視訊剪輯一下啊?
好吧,小編在再大家嘮嘮吧,誰讓小編話多呢?程式走起。。。等等,小編,我是學文科的怎麼辦? 。。。。。,學文科的?開什麼玩笑啊哥,取用愛剪輯吧,那個更適合你。

 framesPath = 'F:\最新的fish1\';       %影象序列所在路徑,同時要保證影象大小相同 ,如果不同,可用 resize()
    videoName = 'Bolt.avi';                     %表示將要建立的視訊檔案的名字  
      fps = 30;                                          %幀率  
    startFrame = 1;                                %從哪一幀開始 (玩愛剪輯的IT朋友,好好看)
    endFrame = 350;                             %哪一幀結束   
    if(exist('videoName','file'))  
        delete videoName.avi             // 判斷下是否存在視訊,小編個人習慣
    end  
                  %生成視訊的引數設定  
    aviobj=VideoWriter(videoName);       %建立一個avi視訊檔案物件,開始時其為空  
    aviobj.FrameRate=fps;   
      open(aviobj);                                  %開啟檔案寫入視訊資料
                 %讀入圖片  
        for  i=startFrame   :  endFrame    // for迴圈,從哪一幀到哪一幀
        fileName=sprintf('%04d',i);       %根據檔名而定 我這裡檔名是0001.jpg 0002.jpg ....  
        frames=imread([framesPath,fileName,'.jpg']);  
        writeVideo(aviobj,frames);  
    end  
    close(aviobj);                         % 關閉建立視訊,養成良好習慣,別吵著別人

小編也是剛剛接觸matlab 幾個月,MATLAB中有豐富的圖形處理能力,提供了繪製各種圖形、影象資料的函式。他提供了一組繪製二維和三維曲線的函式,他們還可以對圖形進行旋轉、縮放等操作。內部還包含豐富的數學函式和資料型別,使用方便且功能非常強大。通過對MATLAB的系統環境,資料的各種運算,矩陣的分析和處理,程式設計,繪圖,數值計算及符號運算的學習,使我在短時間內學會使用MATLAB的基本函式,同時,我們可以自己根據例題編寫設計簡單的程式來實現不同的功能,繪製出比較滿意的二維三維圖形,在實踐中找到樂趣。