《计算机毕业论文多媒体摄像头程序开发与应用.doc》由会员分享,可在线阅读,更多相关《计算机毕业论文多媒体摄像头程序开发与应用.doc(15页珍藏版)》请在三一办公上搜索。
1、系 别 信息技术系 学 号 18 冀中职业学院毕业论文多媒体摄像头程序开发与应用论文作者: 指导教师: 专业 领 域 : 计算机应用 论文提交日期:2011-4-2 2011 年 4 月冀中职业学院毕业论文多媒体摄像头程序开发与应用系 别 信息技术系 专 业 计算机应用 班 级 学 号 姓 名 指导教师 _2011年 4月 2 日摘 要随着多媒体电脑技术的发展与普及,电脑在人们的生活中已是不可或缺的一部分,多媒体技术广泛应用于生活、教学、研发等各个领域。而多媒体摄像头在其中扮演着一个十分重要的角色,应用于娱乐、通讯、安全等方面。操作摄像头方便简单,而在微软公司最新推出的Windows7操作系统
2、中并没有像Windows XP那样给用户提供一个简易操作摄像头的程序,针对这种情况本文讲述了如何利用DirectShow技术开发一个在Windows7以及Windows其他版本的操作系统中都可以使用的多媒体摄像头程序。除此之外,该程序还可以用做单路视频监控软件来使用,足可以满足小型商店以及家庭的需求。关键词:多媒体;摄像头程序;DirectShowDeveloping and Applying of the Multimedia Cameras Program AbstractWith the development of computer technology and multimedia
3、popularization, the computer has already been an integral part in peoples life. The multimedia technology is widely used in many different fields, such as teaching, research and development, and so on. However, multimedia camera plays a very important role, which is applied in entertainment, communi
4、cation, security, etc. Operating cameras is not only convenient, but also easy. While the latest product, Windows7 operating systems by Microsoft, does not like Windows - XP which offers users a simple camera operation program. According to this kind of situation, this article talks about how to use
5、 DirectShow to develop a program which makes the multimedia camera can be used in Windows7 and other series of Windows operating system. In addition, the program also can be used as single video monitoring software, which can totally satisfy the demand of small-sized stores and family.Key words:Mult
6、imedia; Camera Program; DirectShow目 录一概 论1(一)摄像头程序的概况1(二)DYCap(多媒体摄像头程序)的特征1(三)DirectShow组件原理分析1二系统介绍及主要功能的实现方法2(一)开发工具及运行环境2(二)主要功能以及实现方法21. 视频预览22. 视频录制63. 图片采集64. 换肤功能8三小结9参考文献10致谢10附录101. 安装程序102. 源码10一概 论(一)摄像头程序的概况摄像头(Camera)又称为电脑相机,电脑眼等,是一种视频输入设备,被广泛的运用于视频会议,远程医疗及实时监控等方面。普通的人也可以彼此通过摄像头在网络进行有影
7、像、有声音的交谈和沟通。另外,人们还可以将其用于当前各种流行的数码影像,影音处理。摄像头程序是在操作系统之上人和摄像头交互的一种平台,通过摄像头程序可以将摄像头捕捉到的视频信号转换成数字模式,并加以压缩后转换到计算机上运用。(二)DYCap(多媒体摄像头程序)的特征本程序为用户提供丰富友好的操作界面,支持多个视频设备以及解码器的选择,集视频预览、视频录制、图片采集等主要功能为一体,并且为用户提供了非常方便的管理平台。根据不同需要用户可以自己选择相应的解码器来录制视频和进行图片采集。除此之外,该软件还可以当做简单的单路视频监控软件使用,其实时预览、视频录制和图片采集的功能足可以满足小型超市以及家
8、庭监控的需求。(三)DirectShow组件原理分析DirectX是Microsoft公司为游戏和其他高性能多媒体应用所提供的一套底层应用程序编程接口。而DirectShow是DirectX组件的一部分,提供对多媒体数据流的高质量捕获和回放。DirectShow技术是建立在DirectDraw和DirectSound组件基础之上的,它通过DirectDraw对显卡进行控制以显示视频,通过DirectSound对声卡进行控制以播放声音。 DirectShow可提供高质量的多媒体流的捕获和回放功能;支持多种媒体格式,包括ASF(Advanced Systems Format),MPEG(Motio
9、n Picture Experts Group),AVI(Audio-Video Interleaved),MP3(MPEG Audio Layer-3)和WAV声音文件;可以从硬件上捕获媒体数据流;可以自动检测并使用视频和音频加速硬件。因此,DirectShow可以充分发挥媒体的性能,提高运行速度,可以简化媒体播放、媒体间的格式转换和媒体捕获等工作。同时,它还具有极大的可扩展性和灵活性,可以由用户自己创建组件,并将这个组件加入DirectShow结构中以支持新的格式或特殊效果。应用程序与DirectShow组件以及DirectShow所支持的软硬件之间的关系如图1所示:二系统介绍及主要功能的
10、实现方法(一)开发工具及运行环境1. 开发工具本程序采用C#语言和最新版的Visual Studio 2010(C#)+ DirectShow开发包 + Microsoft .NET Framework 4开发。2. 运行环境DirectX 9.0(或更高版本) + Microsoft .NET Framework 4 + Windows操作系统。3. 硬件要求摄像头一个;电脑主机最低配置:处理器 1GHz 内存 512MB 磁盘空间 850MB;电脑主机推荐配置:处理器 2GHz 内存 2GB 磁盘空间(最小值) 850MB;(二)主要功能以及实现方法1. 视频预览程序主界面:(1)程序运行
11、后会自动搜索本地计算机可用视频设备并将其一一列举供用户选择,主要代码如下:/列举视频设备并将其添加到Combobox1foreach(DsDevicedsinDsDevice.GetDevicesOfCat(FilterCategory.VideoInputDevice) comboBox1.Items.Add(ds.Name); comboBox2.Items.Add(); /列举解码器并将其添加到comboBox2 foreach(DsDevicedsinDsDevice.GetDevicesOfCat(FilterCategory.VideoCompressorCategory) com
12、boBox2.Items.Add(ds.Name); (2)点击打开视频,实现视频预览,主要代码如下: 代码一图像初始化:/获取IGraphBuilder接口对象graphBuilder = (IGraphBuilder) new FilterGraph();/获取ICaptureGraphBuilder2接口对象ICaptureGraphBuilder2 captureGraphBuilder = null;captureGraphBuilder = (ICaptureGraphBuilder2) new CaptureGraphBuilder2();/获取IGraphBuilder接口的I
13、MediaControl对象mediaControl = (IMediaControl) this.graphBuilder;/获取m_graphBuilder 接口对象的IMediaEventEx对象mediaEventEx = (IMediaEventEx)graphBuilder;/设置ICaptureGraphBuilder2的IGraphBuilder接口为当前对象int hr = captureGraphBuilder.SetFiltergraph(this.graphBuilder);DsError.ThrowExceptionForHR(hr);/添加视频源设备hr = gra
14、phBuilder.AddFilter(theDevice, source filter);DsError.ThrowExceptionForHR(hr);/添加视频解码器if (theCompressor != null) hr = graphBuilder.AddFilter(theCompressor, compressor filter); DsError.ThrowExceptionForHR(hr);/通过theVideoDevice(IBaseFilter)视频接口对象的Preview Pin预览hr=captureGraphBuilder.RenderStream(PinCat
15、egory.Preview, MediaType.Video, theDevice, null, null);DsError.ThrowExceptionForHR(hr);/获取theVideoDevice的IAMVideoControl对象IVideoWindow videoWindow = null;videoWindow = (IVideoWindow) graphBuilder;/设置panel1为视频显示窗口hr = videoWindow.put_Owner(panel1.Handle);DsError.ThrowExceptionForHR(hr);/去除视频窗口边框hr=vi
16、deoWindow.put_WindowStyle(WindowStyle.Child WindowStyle.ClipChildren);DsError.ThrowExceptionForHR(hr);/把视频窗口绑定在panelhr = videoWindow.SetWindowPosition(0, 0, panel1.Width, panel1.Height);DsError.ThrowExceptionForHR(hr);/释放接口资源Marshal.ReleaseComObject(captureGraphBuilder);代码二开始预览:ImediaControl对象接口提供三种
17、控制状态:开始(Run())、暂停(Pause())和停止(Stop())。预览界面如下图所示:开始预览代码如下:if (mediaControl != null) mediaControl.Run();2. 视频录制视频录制原理及实现方法与视频预览大体相同,用户可以根据不同需求选择不同的解码器来录制不同质量的视频文件,而其实现方法也十分简单只需在图像初始化的时候新建IBaseFilter和IFileSinkFilter两个接口对象,从ICaptureGraphBuilder2接口上调用SetOutputFileName函数将视频文件输出,与此同时从ICaptureGraphBuilder2接
18、口调用RenderStream函数选择解码器来对视频流进行压缩。视频录制相关代码如下:/初始化IbaseFilter接口IBaseFilter mux;/初始化IbaseFilter接口IFileSinkFilter sink;/输出视频文件hr = captureGraphBuilder.SetOutputFileName(MediaSubType.Avi, C:video.avi, out mux, out sink);DsError.ThrowExceptionForHR(hr);/选择解码器对视频流进行压缩hr = captureGraphBuilder.RenderStream(Pi
19、nCategory.Capture, MediaType.Video, theDevice, theCompressor, mux);DsError.ThrowExceptionForHR(hr);/释放接口资源Marshal.ReleaseComObject(mux);Marshal.ReleaseComObject(sink); 3. 图片采集拍照界面集图片采集、参数设定、查看、管理等功能为一体,用户可以根据不同需要设置图片质量,其友好的操作界面及方便的管理功能,令人耳目一新。拍照模式主界面:(1)图片采集的实现方法是在图像初始化成功的基础之上,利用DirectShow开发包提供的图像捕获
20、接口(SampleGrabber)接口进行图片捕获,SampleGrabber图像捕获效率高,利用该接口下的回调函数(SetCallBack)可轻松实现对源视频流的捕获并将其写入BMP文件中,这样便实现的对源视频流的图片采集。图片采集相关代码如下:/创建IbaseFilter接口对象capFilterIBaseFiltercapFilter;/创建IsampleGrabber接口对象sampGrabberISampleGrabber sampGrabber; /当”拍照”按钮按下时,调用IsampleGrabber对象的SetCallback函数hr = sampGrabber.SetCall
21、back(this, 1);/将捕获到的源视频流转换并将其写入BMP文件中int w = videoInfoHeader.BmiHeader.Width;int h = videoInfoHeader.BmiHeader.Height;if( (w & 0x03) != 0) | (w 4096) | (h 4096) )return;int stride = w * 3;GCHandle handle = GCHandle.Alloc( savedArray, GCHandleType.Pinned );int scan0 = (int) handle.AddrOfPinnedObject(
22、);scan0 += (h - 1) * stride;Bitmap b = new Bitmap( w, h, -stride, PixelFormat.Format24bppRgb, (IntPtr) scan0 );(2)图片采集参数设定界面如下图所示:该程序封装在DirectShow动态库中,可以直接调用,调用代码:DsUtils.ShowCapPinDialog( capGraph, capFilter, this.Handle );4. 换肤功能本程序采用第三方控件(IrisSkin2)实现对程序界面的美化,提供多种风格的皮肤供用户选择,操作简便,界面友好。程序皮肤设置如图所示:程
23、序加载皮肤代码:skinEngine1.SkinFile = WaveColor1.ssk;三小结经过了一个多月的学习和工作,我终于完成了此篇论文。从开始选题到系统的实现,再到论文文章的完成,每走一步对我来说都是新的尝试与挑战,这也是我在大学期间独立完成的最大的项目。在这段时间里,我学到了很多知识也有很多感受,我开始了独立的学习和试验,查看相关的资料和书籍,让自己头脑中模糊的概念逐渐清晰,使自己非常稚嫩作品一步步完善起来,每一次改进都是我学习的收获。我的论文作品还不是很成熟,还有很多不足之处,随着自身能力的提高,此程序还将逐步改进。当看着自己的程序,自己成天相伴的系统能够健康的运行,真是莫大的
24、幸福和欣慰。这次做论文的经历也会使我终身受益,我感受到做论文是要真真正正用心去做的一件事情,是真正的自己学习的过程和研究的过程,没有学习就不可能有研究的能力,没有自己的研究,就不会有所突破,那也就不叫论文了。希望这次的经历能让我在以后学习中激励我继续进步。参考文献1刘丽霞.C#范例开发大全M .北京.清华大学出版社.2010.72 陆其明.DirectShow开发指南(第一版)M .北京.清华大学出版社.2004.3致谢本设计在张莉敏老师的悉心指导和严格要求下业已完成,从课题选择、方案论证到具体设计和调试,无不凝聚着老师的心血和汗水,在三年的大学学习和生活期间,也始终感受着导师的精心指导和无私的关怀,我受益匪浅。在此向张老师表示深深的感谢和崇高的敬意。 不积跬步何以至千里,本设计能够顺利的完成,也归功于各位任课老师的认真负责,使我能够很好的掌握和运用专业知识,并在设计中得以体现。正是有了他们的悉心帮助和支持,才使我的毕业论文工作顺利完成,在此向信息技术系的全体老师表示由衷的谢意,感谢你们三年来的辛勤栽培。