资源预览内容
第1页 / 共11页
第2页 / 共11页
第3页 / 共11页
第4页 / 共11页
第5页 / 共11页
第6页 / 共11页
第7页 / 共11页
第8页 / 共11页
第9页 / 共11页
第10页 / 共11页
亲,该文档总共11页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
题目:基于MATLAB对avi视频的处理 彩色视频变为黑白视频姓 名: 学 号: 系 别: 电子信息工程 专 业: 电子科学与技术 2014年 11月 19日基于MATLAB对avi视频的处理 彩色视频变为黑白视频一、实验要求:1.完成一个简单的多媒体应用程序;2.内容包含:多媒体信息的获取、处理、展现三个基本过程;3. 不能是打开一个视频文件播放,也不能用现成的插件完成,比如在程序中插入一个media player的插件完成;二、实验内容:1.实验素材:在本次的对avi视频处理的过程中,原素材选取了“浙江卫视 奔跑吧兄弟20141031期”,720P(1280720),3.72GB,mkv格式,时长01:30:23,如图2.1所示:图2.1实验素材的预处理:在实验中考虑到两点因素,需对原素材做预处理:1.原素材时长太长,一个多小时,分辨率太高,720P,数据量太大,对计算机处理难度太高,需对视频进行截短和降低分辨率,故使用格式工厂先对视频进行处理,如图2.2所示;图2.2本次实验平台是Matlab2010b版本,其中早期的版本中,Matlab中函数aviread对读取avi的视频比较苛刻,aviread支持无压缩格式的avi(zjmediargb24)和Cinepak格式的avi文件和Indeo5压缩格式的avi,在Matlab2010b中的函数mmreader支持的格式更加广泛一些,但是仍然不是很全,故要使用WinAVI对视频格式进行转换,如图2.3所示,视频格式为avi(ZJMedia Uncompress RGB24)。图2.3最终视频素材,如图2.4所示:图2.4分辨率320240, 3.74MB,格式avi(ZJMedia Uncompress RGB24),时长00:00:06,帧率25F/S;(注:其实第二步的winair的处理不必去作,只需格式工厂截短就行,后续验证时作者发现Matlab对普通的avi也支持,若不支持,再做这一步)2.实验过程:先将视频素材进行读取播放,以检验是否能在Matlab2010b环境下读取运行,再将视频转换成图片序列并转换成灰度图片进行存储,再用这些黑白图片进行avi文件的创建并播放黑白视频,流程图如图2.5所示:图2.53.实验具体操作:在此部分简单列出三部分的内容,视频的播放,灰度图像的转换,创建avi文件;a视频的播放程序,如图2.6:图2.6b灰度图像的转换,如图2.7:图2.7c创建avi文件,如图2.8:图2.8三、程序代码:详见源代码及可执行文件四、运行结果及分析:1.视频素材的读取和播放,如图4.1:图4.1图4.1显示了视频素材的读取和播放,格式为avi(ZJMedia Uncompress RGB24),时长为6s,帧率为25F/s。2.灰度图像的获取,如图4.2:图4.2图4.2中所示,将视频转换成图片序列并转换成灰度图片进行存储3.黑白视频的播放,如图4.3:图4.3图4.3中所示,黑白视频的创建已经成功并进行了播放。 五、总结首先,这次是第一次对视频做处理,难度刚开始会感觉到有点难,也不知道该做怎样的处理,然后自己定了一个把彩色的转为黑白的吧,原以为会很好做,思路倒还是清楚,主要就是连续图片的灰度转换,但在做的时候困难很大,特别是这几点:1.对avi视频的预处理,否则Matlab平台不支持该格式;2.视频转换为图片序列并灰度化,进行存储,在存储过程中有不懂的地方,很多的函数看不懂,反复查;3.还有avi视频的创建,因为是针对黑白图像的,资料中很多的针对彩色图像的程序大片地出错,很纠结。所以,整整地算是两个下午吧,都在调程序,最后出来了,看到自己视频的播放时很高兴,以后在学习中还需努力学习,也要多谢老师把自己引入这样一门课,很有意义的一门课。源程序:clear all;close all;%播放程序videoResult = mmreader(D:Angelababy.avi); nFramesResult = videoResult.NumberOfFrames; %帧数vidHeightResult = videoResult.Height; %320vidWidthResult = videoResult.Width; %240% Preallocate movie structure. movResult(1:nFramesResult) = struct(cdata, zeros(vidHeightResult, vidWidthResult, 3, uint8),colormap, ); for j = 1: nFramesResultmovResult(j).cdata = read(videoResult, j); end% Size a figure based on the videos width and height. gf = figure(1); set(gf, position, 320 240 vidWidthResult vidHeightResult)%设置窗口位置和根据图像大小设置窗口大小% Play back the movie once at the videos frame rate. movie(gf ,movResult, 1, videoResult.FrameRate);close all;%灰度图片的获取for i=1: nFramesResultstrtemp=strcat(d:F_gray,int2str(i),.,jpg); %将每帧转成.jpg 的图片F = read(videoResult, i);F_gray = rgb2gray(F);imwrite(F_gray,strtemp,JPG); % 把图像写入磁盘end%创建avi文件myObj = VideoWriter(newfile.avi);%初始化一个avi文件writerObj.FrameRate = 30;open(myObj);for i=1:149%图像序列个数 fname=strcat(d:F_gray,num2str(i),.jpg); frame = imread(fname); writeVideo(myObj,frame);end close(myObj);%播放程序videoResult= mmreader(C:UsersJohnson_LiDesktopdiercizuoyenewfile.avi); nFramesResult = videoResult.NumberOfFrames; %帧数vidHeightResult = videoResult.Height; vidWidthResult = videoResult.Width; % Preallocate movie structure. movResult(1:nFramesResult) = struct(cdata, zeros(vidHeightResult, vidWidthResult, 3, uint8),colormap, ); for j = 1: nFramesResultmovResult(j).cdata = read(videoResult, j); end% Size a figure based on the videos width and height. gf = figure(2); set(gf, position, 320 240 vidWidthResult vidHeightResult)%设置窗口位置和根据图像大小设置窗口大小% Play back the movie once at the videos frame rate. movie(gf ,movResult, 1, videoResult.FrameRate);
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号