%读取视频文件,转换为3维的矩阵
%读取视频文件,不再需要用aviread,因为aviread很多压缩格式不支持,推荐使用VideoReader类
xyloObj = VideoReader('C:\Users\bymin\Desktop\2017D\OMoGMF_code\highway_5s.avi');
%获取视频信息(帧数,高度,宽度)
nFrames = xyloObj.NumberOfFrames;
vidHeight = xyloObj.Height;
vidWidth = xyloObj.Width;
% 先随机生成一个2维矩阵,double类型的
X=rand(vidHeight, vidWidth);
%或者使用zeros函数,比较节省内存: data=zeros(vidHeight, vidWidth,'uint8');
% 读取第k帧,转化为灰度图像,扩展为三维数组
for k = 1 : nFrames
imgdata=read(xyloObj,k);
graydata=rgb2gray(imgdata);
X(:,:,k)=graydata;
end
%这样将一个图像大小为row*col,帧数为m的视频文件就生成了 row*col*m的三维数组。
%在工作空间中,另存为mat数据文件即可。
%也可以直接调用save函数:save(nfilename,'data');
%重命名文件下的的所有文件
folder = 'C:\Users\bymin\Desktop\2017D\2-video\NoWaggleStaBG\highway\input150\';
files = dir([folder '*.jpg']);
for i = 1 : numel(files)
oldname = files(i).name;
I = imread(oldname);
%[pathstr, name, ext] = fileparts(oldname) ;
% if i<10
% newname = strcat('000',num2str(i),'.jpg');
% imwrite(I,newname,'jpg');
% elseif i>=10
% newname = strcat('00',num2str(i),'.jpg');
% imwrite(I,newname,'jpg');
%
% end
newname = strcat(num2str(i),'.jpg');
imwrite(I,newname,'jpg');
end
%将所有单帧图片转换为视频
DIR='C:\Users\bymin\Desktop\2017D\2-video\NoWaggleStaBG\highway\input150\'; %图片所在文件夹
file=dir(strcat(DIR,'*.jpg')); %读取所有jpg文件
filenum=size(file,1); %图片总数
obj_gray = VideoWriter('highway_5s.avi'); %所转换成的视频名称
writerFrames = filenum; %视频帧数
%将单张图片存在avi文件
open(obj_gray);
for k = 1: writerFrames
fname = strcat(DIR, num2str(k), '.jpg');
frame = imread(fname);
writeVideo(obj_gray, frame);
end
close(obj_gray);
img2mat.m
%将所有单帧图片转换为向量存储为mat文件
clear
clc
%DIR='E:\MatlabCode\View2mat\campus5\'; %单帧图片所在文件夹
DIR = 'C:\Users\bymin\Desktop\2017D\2-video\NoWaggleStaBG\highway\input150\'
file=dir(strcat(DIR,'*.jpg')); %读取图片所在文件所有jpg文件
filenum=size(file,1); %图片个数
fname = strcat(DIR, num2str(1), '.jpg'); %第一张图片的文件名
frame = imread(fname); %读取第一张图片
rows = size(frame(:),1); %单张图片的总像素个数
XX = zeros(rows, filenum); %将所有图片拉成矩阵时的维数
%将所有图片存为一矩阵
for k = 1: filenum
fname = strcat(DIR, num2str(k), '.jpg');
frame = imread(fname);
x = frame(:);
XX(:, k) = x;
%writeVideo(obj_gray, frame);
end
%将视频矩阵及其行列数存在obj对象
obj.XX = uint8(XX);
obj.siz = size(frame);
%save campus5 obj %将obj对象存为mat文件
save 5sMat obj