利用matlab将视频分帧成图片或将图片转成视频

来源:互联网 发布:javascript静态网页 编辑:程序博客网 时间:2024/04/29 08:16

前几日因为写论文有需要,我必须从视频里面提取图片。n年前,小编当时还是一名小菜之时(虽然现在也还是菜鸟一个),那时总是要到处找一些软件来实现分帧,但是现在视频太大了,软件不能够一下全部将视频图片转换,而且转换完所需内存太大。加上小编这人总是喜欢玩得high点,因此我就想能不能使用程序读取一帧,保存一帧,然后清空呢,再循环下去。
答案当然是可以的。平常对图像处理用的多的软件就是matlab了,今天小编就来和大家讲讲如何利用matllab 对视频进行分帧,以后大家对视频进行分帧或者将一张张图片整成视频就可以直接copy使用了
废话就不多唠了,来吧,程序走起

每个朋友它的需求总是不一样的,我还是把单纯的视频分帧程序也给挂出来吧

clc,clear;     fileName = '1.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

下面是时候展现真正的技术了,读取一张扔一张

clc;     clear;      %% 读取视频     video_file='***.avi';       //这里可以使用昨天小编教大家使用OPENCV自拍的视频为例哦     video=VideoReader(video_file);     frame_number=floor(video.Duration * video.FrameRate);  // 获取帧数,为下面循环准备     %% 分离图片      for i=1:frame_number      image_name=strcat('****\', num2str(i));      image_name=strcat(image_name,'.jpg');         I=read(video,i);                               %读出图片         imwrite(I,image_name,'jpg');           %写图片         I=[];    end

又有人问到,小编,干脆也讲下如何将一帧帧图片合成视频吧。还有人问,小编,怎么把视频剪辑一下啊?
好吧,小编在再大家唠唠吧,谁让小编话多呢?程序走起。。。等等,小编,我是学文科的怎么办? 。。。。。,学文科的?开什么玩笑啊哥,取用爱剪辑吧,那个更适合你。

 framesPath = 'F:\最新的fish1\';       %图像序列所在路径,同时要保证图像大小相同 ,如果不同,可用 resize()    videoName = 'Bolt.avi';                     %表示将要创建的视频文件的名字        fps = 30;                                          %帧率      startFrame = 1;                                %从哪一帧开始 (玩爱剪辑的IT朋友,好好看)    endFrame = 350;                             %哪一帧结束       if(exist('videoName','file'))          delete videoName.avi             // 判断下是否存在视频,小编个人习惯    end                    %生成视频的参数设定      aviobj=VideoWriter(videoName);       %创建一个avi视频文件对象,开始时其为空      aviobj.FrameRate=fps;         open(aviobj);                                  %打开文件写入视频数据                 %读入图片          for  i=startFrame   :  endFrame    // for循环,从哪一帧到哪一帧        fileName=sprintf('%04d',i);       %根据文件名而定 我这里文件名是0001.jpg 0002.jpg ....          frames=imread([framesPath,fileName,'.jpg']);          writeVideo(aviobj,frames);      end      close(aviobj);                         % 关闭创建视频,养成良好习惯,别吵着别人

小编也是刚刚接触matlab 几个月,MATLAB中有丰富的图形处理能力,提供了绘制各种图形、图像数据的函数。他提供了一组绘制二维和三维曲线的函数,他们还可以对图形进行旋转、缩放等操作。内部还包含丰富的数学函数和数据类型,使用方便且功能非常强大。通过对MATLAB的系统环境,数据的各种运算,矩阵的分析和处理,程序设计,绘图,数值计算及符号运算的学习,使我在短时间内学会使用MATLAB的基本函数,同时,我们可以自己根据例题编写设计简单的程序来实现不同的功能,绘制出比较满意的二维三维图形,在实践中找到乐趣。

原创粉丝点击