首頁 > 軟體

Matlab實現將影象序列合併為視訊的方法詳解

2023-03-09 06:00:13

MATLAB是一種高效能語言,用於操縱矩陣、執行技術計算、繪圖等。它代表矩陣實驗室。藉助這個軟體,我們可以從影象中建立視訊。

參考程式碼一

以下程式碼適合序列影象名稱為1、2、3、4、5等名稱的圖片。

videoname='VBRPCA_qj';                           % 待生成的視訊檔名
myfilepath='C:UsersxiaomaoDesktopys_hb'     % 待合成的圖片存放路徑,需根據實際修改
 
WriterObj = VideoWriter([videoname,'.avi']);    % 設定待合成的視訊(不僅限於avi格式)名稱
WriterObj.FrameRate = 10;                       % 設定每秒幀數
open(WriterObj);
filepath = dir([myfilepath,'*.jpg']);           % 獲取路徑myfilepath資料夾中所有png的檔案結構體
 
for k = 1:length(filepath)
    frame=imread([filepath(k).folder,'', strcat(num2str(k-1), '.jpg')]); % 遍歷讀取影象,放在變數frame中
    writeVideo(WriterObj,frame); % 將frame放到變數WriterObj中
end
 
close(WriterObj);
fprintf([videoname,'.avi','製作成功n'])

參考程式碼二

以下程式碼適合圖片名稱為,001、002、003等名稱的圖片。

videoname='VBRPCA_qj';                          % 待生成的視訊檔名
myfilepath='D:test'                           % 待合成的圖片存放路徑,需根據實際修改
 
WriterObj = VideoWriter([videoname,'.avi']);    % 設定待合成的視訊(不僅限於avi格式)名稱
WriterObj.FrameRate = 10;                       % 設定每秒幀數
open(WriterObj);
filepath = dir([myfilepath,'*.png']);           % 獲取路徑myfilepath資料夾中所有png的檔案結構體
 
for k = 1:length(filepath)
    frame=imread([filepath(k).folder,'',filepath(k).name]); % 遍歷讀取影象,放在變數frame中
    writeVideo(WriterObj,frame); % 將frame放到變數WriterObj中
end
 
close(WriterObj);
fprintf([videoname,'.avi','製作成功n'])

上面兩段程式碼的主要區別就是for迴圈裡面的檔案路徑的組織方式不同。

參考程式碼三

MATLAB提供了一個專門的函數來建立元胞陣列,即cell函數。cell函數用於建立一維、二維或者多維空元胞陣列。

photos   = cell(3,1);
photos{1} = imread('image1.png');
photos{2} = imread('image2.png');
photos{3} = imread('image3.png');
 
% 建立每秒1幀的視訊檔
videofile = VideoWriter('output.mp4','MPEG-4');
videofile.FrameRate = 1;
 
% 設定每個影象的秒數
secperImg = [2 3 4];
 
% 開啟視訊檔
open(videofile);
% 將幀寫入視訊
for i=1:length(photos)
    % convert the image to a frame
    frame = im2frame(photos{i});
    for v=1:secperImg(i) 
        writeVideo(videofile, frame);
    end
end
% 關閉視訊檔
close(videofile);

參考程式碼四,視訊讀取

fileName = 'MVI_1264_clip.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

如果是mat格式檔案,load載入即可。

到此這篇關於Matlab實現將影象序列合併為視訊的方法詳解的文章就介紹到這了,更多相關Matlab影象序列合併為視訊內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com