一、把视频分成一帧帧的图片的几种方法
①
1 2 3 4 5 6 | obj = VideoReader('E:\工业相机\sp\PIC_0145.MP4');%输入视频位置 numFrames = obj.NumberOfFrames;% 帧的总数 for k = 1 : 15% 读取前15帧 frame = read(obj,k);%读取第几帧 imwrite(frame,strcat('E:\工业相机\111\',num2str(k),'.jpg'),'jpg');% 保存帧 end |
②
1 2 3 4 5 6 7 8 | xyloObj = VideoReader('E:\工业相机\sp\PIC_0141.MP4'); nFrames = xyloObj.NumberOfFrames; vidHeight = xyloObj.Height; vidWidth = xyloObj.Width; for k = 1 : nFrames im = read(xyloObj, k);%读取第k帧,存入im中 imwrite(im, ['original_frame',num2str(k),'.bmp'], 'bmp');%把im存储成图片,并且存储的文件名根据序号改变 end |
③
1 2 3 4 5 6 7 8 9 10 | video_file='E:\工业相机\sp\PIC_0140.MP4'; video=VideoReader(video_file); frame_number=video.NumberOfFrames; for i=1:6 image_name=strcat('E:\工业相机\111\',num2str(i)); image_name=strcat(image_name,'.jpg'); I=read(video,i); %读出图片 imwrite(I,image_name,'jpg'); I=[]; end |
二、查看视频的帧率帧数
以运行第一种方法为例,运行之前先记得包含视频路径不然找不到文件,运行之后,工作区如下
numFrames即为视频的帧数,点击obj,即可以看到视频的详细信息,时长,帧率等
三、把图片按指定帧率合成视频
1 2 3 4 5 6 7 8 9 10 11 12 13 | srcDic = uigetdir('E:\工业相机\111'); cd(srcDic); allnames = struct2cell(dir('*.jpeg')); [k,len]=size(allnames); aviobj = VideoWriter('driver7.avi'); aviobj.FrameRate = 5; open(aviobj) for i = 1:100 name = allnames{1,i}; frame = imread(name); writeVideo(aviobj,frame); end close(aviobj) |