天天看點

matlab avi視訊檔案與mat檔案 互相轉換

% 讀取avi格式視訊,并轉換成mat格式;
% 彩色圖像,三通道單獨存儲;
clc;
clear all;

obj = VideoReader('E:\示例圖像\扭曲幀\1.avi\1.mp4');
Frames =im2double(read(obj));


for i=1:size(Frames,3)
    temR = Frames(:,:,i);   temR = imresize(temR,[200,300]);   framesR(:,:,i)=temR(:,:,1);   %R通道
%     temG = Frames(:,:,i);   temG = imresize(temG,[200,300]);   framesG(:,:,i)=temG(:,:,2);   %G通道
%     temB = Frames(:,:,i);   temB = imresize(temB,[200,300]);   framesB(:,:,i)=temB(:,:,3);   %B通道
end

save 'E:\示例圖像\扭曲幀\1.avi\R' framesR;   % 儲存
% save 'E:\示例圖像\扭曲幀\1.avi\G' framesG;
% save 'E:\示例圖像\扭曲幀\1.avi\B' framesB;
           

問題:如果三通道同時儲存,可能會遇見出錯:“索引超出矩陣次元。”,隻需每個通道單獨提取即可

% .mat檔案轉avi視訊檔案
load 'E:\示例圖像\扭曲幀\下往上視訊\下往上2\11.mat'
videoName = 'Bolt.avi';%表示将要建立的視訊檔案的名字
fps = 15; %幀率

if(exist('videoName','file'))
    delete videoName.avi
end

%生成視訊的參數設定
aviobj=VideoWriter(videoName);  %建立一個avi視訊檔案對象,開始時其為空
aviobj.FrameRate=fps;

open(aviobj);%Open file for writing video data
%讀入圖檔
for i=1:size(frames,3)
    Frames=im2uint8(frames(:,:,i));  % 圖像類型轉換
    Frames=imresize(Frames,[200,300]); % 尺寸修正
    writeVideo(aviobj,Frames); % 儲存
end
close(aviobj);% 關閉建立視訊
           

繼續閱讀