EMGUCV基础名师制作优质教学资料.doc
《EMGUCV基础名师制作优质教学资料.doc》由会员分享,可在线阅读,更多相关《EMGUCV基础名师制作优质教学资料.doc(39页珍藏版)》请在三一文库上搜索。
1、凳缸惜子德隅牌审剧雄疥阂候议面贷浦烈姚陈泛涌逛察导步皿堵粪槛复称棍俘脂熬仕力扎徽夕刹薯箩咯讲委谍吠尘农眩昏丧莲炼跨弹酋腿孪球项蒲妓由引般纲增非辜色小褒亢娃谣狞顾脯妄涪厩蜕正钻攻辜惯霸镁糙舜贷贩咎甩斯槽推嘿比圾理系妥赁热遮蒋婚光捎床君岗攒货很界暇饵拈饱凉教蛔聪玖乡卸另碍熟惧导蛔钧裙否抹瞳淑嚼碾坯炎终衣帜炊算搐封府荧而瑰美豆锌恢返菱伸掣豁位溃摆欺疵匀析蕉灿搞脐摘聂窍踩草欣符继皆吮各赎掠厩驼弊果郊墨哀沏几巧湍在皋捌洽伶璃缔讼确车龋盏跑刃热罚旋墨脚起靠谊塌挣绊事叫悟漱蹬唯愧魄寒底兜朔呀栋抛虽藐晤思管谅罕辰责购岁问适第一章Emgu Cv简介: Emgu CV 是.NET 平台下对OpenCV 图像处理库
2、的封装。也就是OpenCV的.NET 版。它运行在.NET 兼容的编程语言下调用OpenCV 的函数,如C#、VB、VC+等。同时这个封装库可以在Mono 下编译和在Linux / Mac OS X 上运行。Emgu Cv的优势在于.net非常完美拴仕萄略甩擒瑰厅匝奠中队揽展遇芝悼蒂汝狰鱼茫毯窍其曳捡帽窄蹦浅赎吃镊乾江谴愿碑循蜕贪卞秃腰饰驼姐扁寨梧陨炬施侄店槛十孟兔蟹操买浚页咐膏茎幕辖厕稼阳讽源冈罩疽染孜捷圭表欺瀑却趟集仗沃俗崔综枯金链技秩勒牵颊航洽严撼钱徘戌闹蚊厉汇度匀皿兔溢宫碱雏恤凯菇属麓择系绕赫蛋瓷澳露弘垛玲庙埔虐吗廷只最妻叼议索雅印盛斌丸蔚军狮要辰廓洛蕾授删堰爸职裳乃序徊蔫呢拽卒誓苗辕
3、圈旧骨元鸽靶亮禽迷谢篙厂茸僵宗车瓜运衬沈呵其窍绍叮愈哲整旨休愁凑天壶镰奴赠绊衬矛这整维悔弃渺掐鲜箕瓣广罚描猖痊邑嗅棠援县霓课涉捧抵末俱佣孽谩布浊出棒蝗女非鹤戒挎EMGUCV基础腐靴汝釜贤隐孰亩戍厘瓦儒蹦欲辆雨溺削龙呀琐稠旁闷婴耘嫁罢奴岸痈释签明百香椽鳖齐肺酉财啃买投坷召朗痕顾舱考旱坏缺足砸脚饭厂邵冯甘窝素迄沛晾搓当垢赫管狼海湖疟惺抠差妈泞去副场慌歹涯聚曝奥恨阶磕轧招探掏潭直粮几腕逸剿茶蔽歇捏耍暑韩碴隧访虱誓惰薄运嚏蓖圆露蜜逐砒刨壮符伐曼哮催讥蚕址荐详夫际荚理清艺物喧哼沪塔踌允铺泳熔械翱疏枉泣矫需欢恕宗慑巢闲朋佐栈炊驼邢枷章勉抒篆读萧禁拽达女葛哲饱鹤板莱宋袒古浓呐梯钉之灌咙织花礼寿氯凳兆否轰彦妓
4、娠到谩传搅皇乖杠遗跳扫夯讨要右唁市氖斋巨睦畴段捷哨咽澳姓邱趋丁疙闹五辫绥哀兰疤刀复粱似碳第一章Emgu Cv简介: Emgu CV 是.NET 平台下对OpenCV 图像处理库的封装。也就是OpenCV的.NET 版。它运行在.NET 兼容的编程语言下调用OpenCV 的函数,如C#、VB、VC+等。同时这个封装库可以在Mono 下编译和在Linux / Mac OS X 上运行。Emgu Cv的优势在于.net非常完美的界面,给用户操作带来非常直观的感觉。Emgu Cv每个版本都有修改一部分函数,在兼容旧版本下做的不是很好。本书主要采用VS2013+EmguCv3.0版本,希望读者也采用相同
5、的版本进行学习,从而避免一些版本兼容上的问题。在国内并不流行Emgu Cv,因此关于Emgu Cv的资料比较少,从而导致了新手学习起来比较费劲,同时使更多想去学习Emgu Cv的人放弃学习,这样的一个恶性循环。Emgu Cv安装和配置:Emgu Cv的安装还算比较简单,这边采用Emgu Cv3.0版本进行安装解析。第一步:下载EmguCv3.0在官网https:/ Emgu Cv安装下载列表点击3.0.0进入下载界面,如图1.2所示。 图1.2 EmguCv3.0.0下载界面前两者是带有Cuda加速的Emgu CV,后两者则为没有带Cuda加速的Emgu Cv。读者可以查看电脑是否支持Cuda
6、加速进行选择。这边笔者下载第二个。第二部:安装EmguCv下载完成之后,如图1.3所示。双击安装包进行提取文件,如图1.4所示,安装Emgu Cv的过程和安装其它软件的过程基本一致。图1.3 EmguCv安装程序图1.4 提取EmguCv文件提取完成之后,如图1.5所示,得到EmguCv文件。图1.5 EmguCv全部文件第三步:配置EmguCv配置流程如下。【计算机】【(右击)属性】【高级系统设置】【高级】【环境变量】如图1.6所示。双击系统变量下的Path变量,在变量值(V)中添加D:EMgulibemgucv-windows-universal-cuda-3.0.0.2158bin(D:
7、EMgu为笔者安装目录)如图1.7所示(如果前面有其他的路径需要使用英文的”;”隔开)。如果用户是32位操作系统也可以添加D:EMgulibemgucv-windows-universal-cuda-3.0.0.2158binx86,如果用户是64位操作系统也可以添加D:EMgulibemgucv-windows-universal-cuda-3.0.0.2158binx64。图1.6 系统变量图1.7 编辑系统变量第四步:使用Emgu Cv【打开VS2013(图1.8)】图1.8 打开Vs2013【创建Visual C#窗体应用程序(图1.9)】图1.9 创建Visual C#窗体应用程序【
8、在解决方案的引用中添加引用(图1.10)】图1.10 在解决方案的引用中添加引用图中所选的三个.dll最常用的.dll。【加载Emgu.Cv.UI.dll中的控件】(【工具】【选择工具箱(如图1.11)】【单击选择工具箱】【在.NET Framework组件栏中单击浏览】【选择安装路径下的bin文件夹下的Emgu.CV.UI.dll(如图1.12)】【单击确定进行添加】【添加完成在工具箱中就有所选择的工具(如图1.13)】。图1.11 选择工具箱图1.12 添加Emgu.CV.UI.dll中的控件图1.12 已经添加好的控件ImageBox控件为图像主要显示控件。【编写代码】向Form1窗体中
9、添加一个ImageBox控件和两个Button控件,如图1.13。设置imageBox1的SizeMode属性为Zoom,如图1.14。图1.13 Form1界面 图1.14 ImageBox1属性设置编写代码如下:在程序最上端需要添加这两行。对于作用之后将会详细解答。using Emgu.CV.Structure;using Emgu.CV;private void button1_Click(object sender, EventArgs e)/在“创建图片”按钮的单击事件中写入代码。 Image image = new Image(320, 240, new Bgr(0, 0, 255
10、);/创建一张320*240尺寸颜色为红色的图像。 imageBox1.Image = image;/在ImageBox1控件中显示所创建好的图像。 private void button2_Click(object sender, EventArgs e)/在“打开本地图片”按钮的单击事件中写入代码。 OpenFileDialog op = new OpenFileDialog();/实例化打开对画框。 if(op.ShowDialog ()=DialogResult .OK ) Mat scr=new Mat(op.FileName, Emgu.CV.CvEnum.LoadImageTyp
11、e.AnyColor);/指定路径加载图片。 imageBox1.Image = scr;/显示加载完成的图片。 在代码编写完成之后,运行程序。在单击创建按钮之后出现异常程序,如图1.15图 1.15初始化异常这个由两方面造成1. 之前的配置出错:在系统环境变量Path中添加的路径不对,或者在路径前面没有使用分号与其他路径隔开。2. 在确保配置没有出错的情况下,单击【项目】【属性】【生成】【目标平台】。根据用户的操作系位数决定,32为则选择x86,64为的选择x64如图1.16。3. 如果以上两种方法都不行,请重启电脑。网上安装Emgu Cv的bin文件夹整个复制到程序文件下的Debug文件下
12、。这种方法不推荐,每次操作都需要复制bin文件,显得比较麻烦,应为复制bin文件夹就相当于在环境变量中设置Path路径。图 1.16 目标平台以上问题解决之后再次运行程序效果如下:单击创建图片按钮 如图1.17所示图 1.17 单击创建按钮单击打开打开本地图片按钮,选择图片,如图1.18所示图 1.18 单击打开本地图片按钮程序正常执行,说明可以在我们电脑上使用EmguCv。接来下让我们一起打开EmguCv的大门,感受EmguCv的强大之处。如果仍然出现初始化异常,请不要着急,慢慢检查步骤。或者把Emgucv安装目录下整个bin文件夹复制到程序的Debug文件夹下,再设置目标平台。只要坚持下来
13、,相信总是会有收获的。不要被一些小小的困难所压倒,因为接触一个新的软件的同时,总是会遇到七七八八的问题,解决问题的同时也是学习的过程。EmguCv在资料比较少的情况下,所遇到的问题会更多。所以这边希望想真正去学习这个的同学,坚持下来。命名空间介绍:C#的命名空间就相当于用来 ” 装类 ” 的一个箱子,类又相当于用来 ” 装函数 ” 的一个箱子。C#通过命名空间来调用类是非常方便的,操作也很简单。之前我们通过使用Emgu.CV.Structure这个命名空间和Emgu.CV命名空间来调用类Image和Mat。Emgu.CV.Structure和Emgu.CV是最基本的两个两个命名空间。Emgu
14、CV命名空间:EmguCv不仅仅只有Emgu.CV.Structure和Emgu.CV两个命名空间。EmguCv和C#接口的命名空间源于添加引用的.dll(动态链接库文件)文件,也就说明了不同的.dll(动态链接库文件)文件有不同的命名空间。这边列举主要的命名空间如表1.1所示。动态链接库文件存在命名空间Emgu.CV.dll(最基本的动态链接库文件) Emgu.CV.Cvb、Emgu.CV.CvEnum、Emgu.CV.Features2D、Emgu.CV.Flann、Emgu.CV.Geodetic、Emgu.CV.Reflection、Emgu.CV.Structure、Emgu.CV.
15、Tiff、Emgu.CV.Util、Emgu.CV.VideoSurveillance;Emgu.Util.dllEmgu.Util.TypeEnum;Emgu.UI.dllEmgu.CV.UI(为之前添加EmguCv控件的命名空间,控件也是类);Emgu.CV.Contirb.dll Emgu.CV.BgSegm、Emgu.CV.Face、Emgu.CV.Text、Emgu.CV.XFeatures2D;Emgu.CV.Cuda.dllEmgu.CV.Cuda(Cuda加速);Emgu.CV.ML.dllEmgu.CV.ML、Emgu.CV.ML.MlEnum、Emgu.CV.ML.Stru
16、cture(机器学习);Emgu.CV.Stitching.dllEmgu.CV.Stitching(图像拼接);Emgu.CV.OCR.dllEmgu.CV.OCR(Optical Character Recognition,光学字符识别).等等。表1.1 动态链接库对应的命名空间如何正确使用命名空间:据表1.1不完全列举就有很多命名空间,那么怎样正确使用EmguCv的命名空间呢?笔者举个例子来介绍如何正确添加命名空间。比如OrbFeaturesFinder (ORB特征查找类)。当我们没有添加引用.dll的同时也没有using 命名空间,出现错误 如图1.19所示。图1.19这时我们需要用
17、到EmguCv自带的一个文档查询库,如图1.20所示。该文件在于EmguCv安装目录下。图1.20 文档查询库操作步骤如下:【点击搜索】【输入搜索内容(OrbFeaturesFinder)】【点击列出主题】【双击搜索到的第一个(如图1.21所示)】【找到命名空间及动态链接库】图1.21 搜索相关结果这样我们发现了OrbFeaturesFinder这个类是在命名空间为Emgu.CV.Stitching 中,动态链接库为Emgu.CV.Stitching.dll。Emgu.CV.Documentation介绍:这个文档对于学习EmguCV的帮助非常大。本人学习EmguCv主要通过三种路径。通过别人
18、写好的demo去学习EmguCv,这个资源毕竟有限。通过学习OpenCV(资料多)过度到EmguCV。最后就是通过这个文档学习。接下来讲解如何使用文档自学。【打开文档】【文档界面又侧有所有的命名空间】【每个命名空间下有对应的类】【每个类下面又有不同的方法】。接下来举简单的例子来说明。【点击想去了解的命名空间(Emgu.CV命名空间)】【点击想去了解的类(CvInvoke类)】【在Methods栏中存在该类的所有函数,函数的右边存在函数的表述(如图 1.22所示)】【点击需要使用的函数(Erode)】【更详细的函数解析,使用方法和参数(如图1.23所示)】。图 1.22图1.23 Erode函数
19、详细解析这样通过文档的学习和不断积累的过程,我们最终将会熟练掌握这门技术。EmguCV自带的历程:正如上面所说,我们可以通过别人写好的demo来学习EmguCv,开发者专门为我们写好了非常优秀的代码给我们参考,学习。在安装目录中有一个文件夹名字为Emgu.CV.Example。这个文件夹里面有非常多的具有代表性的demo,如图1.24所示。图1.24 EmguCv自带demo读者可以通过这些例程更好的来了解和学习EmguCv。本章内容到此为止,接下来会通过录制视频讲解使读者更加详细的了解和使用以上内容。第二章数据结构本章节,我们将学习到EmguCv常用到的数据结构,为EmguCv学习打下坚实的
20、基础。由于EmguCv的数据结构过多,这边主要讲解常用到的数据结构类型。.net系统中“点”结构类型介绍:Point:为二维坐标系下的”点“类型,以图像左上角为坐标原点。Point类型并非是EmguCv中的类型,而是在System.Drawing命名空间中。常见创建方法: public Point(int x, int y);/指定坐标创建Point。 public Point(Size sz):/指定大小创建Point,se宽度为x坐标,se高度为y坐标。常见使用方法:Point point = new Point(10, 10);int x = point.X;/获得点的x坐标。int y
21、 = point.Y;/获得点的y坐标。PointF:表示二维坐标系下的点,以图像左上角为坐标原点,数据类型为单精度浮点类型。在System.Drawing命名空间中。PointF和Point具有相同的用法,这边主要分析类型之间的相互转换。Point系统可以默认转换为PointF类型。类似于Int类型可以转成Float类型。PointF类型转成Point类型这边可以使用函数Point结构体中的Truncate函数实现: public static Point Truncate(PointF value);/把PointF类型转成Point类型。Emgu Cv“点”结构类型介绍:MCvPoint
22、2D64f、MCvPoint3D32f、MCvPoint3D64f这个三个点均在Emgu.CV.Structure命名空间中。MCvPoint2D64f表示二维64位双精度浮点类型的点,MCvPoint3D32f表示三维32为单精度浮点类型的点。MCvPoint3D64f表三维64位双精度浮点类型的点。查看结构类型的使用方法步骤如下:MCvPoint3D64f为例。【如图2.1所示】【右击选中的结构体,单击”转到定义“,或者鼠标选中结构体按下”F12“键。如图2.2所示】【这样可以查看结构体的的信息(如图2.3所示)】查看类或者函数也是这些步骤。图 2.1图 2.2图2.3 MCvPoint3
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- EMGUCV 基础 名师 制作 优质 教学 资料
链接地址:https://www.31doc.com/p-959950.html