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);% 关闭创建视频

猜你喜欢

转载自blog.csdn.net/qq_38676868/article/details/84146351