《2022年EMGUCV基础教学文案 .pdf》由会员分享,可在线阅读,更多相关《2022年EMGUCV基础教学文案 .pdf(39页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、此文档来源于网络,如有侵权请联系网站删除只供学习交流用第一章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版本,希望读者也采用相同的版本进行学习,从
2、而避免一些版本兼容上的问题。在国内并不流行Emgu Cv,因此关于 Emgu Cv的资料比较少,从而导致了新手学习起来比较费劲,同时使更多想去学习 Emgu Cv的人放弃学习,这样的一个恶性循环。Emgu Cv安装和配置:Emgu Cv的安装还算比较简单,这边采用Emgu Cv3.0版本进行安装解析。第一步:下载EmguCv3.0 在官网 https:/ 3.0.0版本进行下载,如图1.1 所示。 (写作时间为2016 年 4 月,因此3.1 版本也已经发布。这边边通过对某一个版本的学习,在去了解其它版本的也是非常简单的。)图 1.1 Emgu Cv安装下载列表点击 3.0.0 进入下载界面,
3、如图1.2 所示。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 39 页 - - - - - - - - - 此文档来源于网络,如有侵权请联系网站删除只供学习交流用图 1.2 EmguCv3.0.0 下载界面前两者是带有Cuda加速的 Emgu CV ,后两者则为没有带Cuda加速的 Emgu Cv 。读者可以查看电脑是否支持Cuda加速进行选择。这边笔者下载第二个。第二部:安装EmguCv 下载完成之后,如图1.3 所示。双击安装包进行提取文件,如图1.4 所示,安装
4、 Emgu Cv的过程和安装其它软件的过程基本一致。图 1.3 EmguCv 安装程序图 1.4 提取 EmguCv 文件提取完成之后,如图1.5 所示,得到EmguCv文件。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 39 页 - - - - - - - - - 此文档来源于网络,如有侵权请联系网站删除只供学习交流用图 1.5 EmguCv 全部文件第三步:配置EmguCv 配置流程如下。【计算机】 【 (右击)属性】 【高级系统设置】【高级】 【环境变量】如图1.
5、6所示。双击系 统变量下的Path变量,在 变量值(V)中添加D:EMgulibemgucv-windows-universal-cuda-3.0.0.2158bin(D:EMgu为笔者安装目录)如图 1.7 所示(如果前面有其他的路径需要使用英文的” ;” 隔开)。如果用户是32 位操作系统也可以添加D:EMgulibemgucv-windows-universal-cuda-3.0.0.2158binx86,如果用户是 64 位操作系统也可以添加D:EMgulibemgucv-windows-universal-cuda-3.0.0.2158 binx64 。图 1.6 系统变量图 1.7
6、 编辑系统变量名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 39 页 - - - - - - - - - 此文档来源于网络,如有侵权请联系网站删除只供学习交流用第四步:使用Emgu Cv 【打开 VS2013 (图 1.8 ) 】图 1.8 打开 Vs2013 【创建 Visual C#窗体应用程序(图1.9) 】图 1.9 创建 Visual C# 窗体应用程序名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - -
7、 - 名师精心整理 - - - - - - - 第 4 页,共 39 页 - - - - - - - - - 此文档来源于网络,如有侵权请联系网站删除只供学习交流用【在解决方案的引用中添加引用(图1.10 ) 】图 1.10 在解决方案的引用中添加引用图中所选的三个.dll 最常用的 .dll 。【加载 Emgu.Cv.UI.dll中的控件】( 【工具】 【选择工具箱 (如图 1.11) 】【单击选择工具箱】【在 .NET Framework组件栏中单击浏览】 【选择安装路径下的bin 文件夹下的Emgu.CV.UI.dll(如图 1.12 ) 】【单击确定进行添加】【添加完成在工具箱中就有所
8、选择的工具(如图1.13 ) 】 。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 39 页 - - - - - - - - - 此文档来源于网络,如有侵权请联系网站删除只供学习交流用图 1.11 选择工具箱图 1.12 添加 Emgu.CV.UI.dll中的控件名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 39 页 - - - - - - - -
9、 - 此文档来源于网络,如有侵权请联系网站删除只供学习交流用图 1.12 已经添加好的控件ImageBox 控件为图像主要显示控件。【编写代码】向 Form1 窗体中添加一个ImageBox 控件和两个Button 控件,如图1.13。设置imageBox1 的 SizeMode 属性为 Zoom,如图 1.14。图 1.13 Form1 界面图 1.14 ImageBox1 属性设置编写代码如下:在程序最上端需要添加这两行。对于作用之后将会详细解答。using Emgu.CV.Structure; using Emgu.CV; 名师资料总结 - - -精品资料欢迎下载 - - - - - -
10、 - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 39 页 - - - - - - - - - 此文档来源于网络,如有侵权请联系网站删除只供学习交流用private void button1_Click(object sender, EventArgs e)/在“创建图片”按钮的单击事件中写入代码。 Image image = new Image(320, 240, new Bgr(0, 0, 255);/创建一张320*240 尺寸颜色为红色的图像。imageBox1.Image = image;/ 在 ImageBox1 控件中显示
11、所创建好的图像。 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.LoadImageType.AnyColor);/指定路径加载图片。imageBox1.Image = scr;/ 显示加载完成的图片。 在代码编写完成之后
12、,运行程序。在单击创建按钮之后出现异常程序,如图1.15 图 1.15 初始化异常这个由两方面造成1. 之前的配置出错:在系统环境变量Path 中添加的路径不对,或者在路径前面没有使用分号与其他路径隔开。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 39 页 - - - - - - - - - 此文档来源于网络,如有侵权请联系网站删除只供学习交流用2. 在确保配置没有出错的情况下,单击【项目】【属性】 【生成】 【目标平台】 。根据用户的操作系位数决定,32 为则选择
13、x86,64 为的选择 x64 如图 1.16。3. 如果以上两种方法都不行,请重启电脑。网上安装Emgu Cv的 bin 文件夹整个复制到程序文件下的Debug 文件下。 这种方法不推荐,每次操作都需要复制bin 文件,显得比较麻烦,应为复制bin 文件夹就相当于在环境变量中设置Path 路径。图 1.16 目标平台以上问题解决之后再次运行程序效果如下:单击创建图片按钮如图 1.17 所示名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 39 页 - - - - - -
14、- - - 此文档来源于网络,如有侵权请联系网站删除只供学习交流用图 1.17 单击创建按钮单击打开打开本地图片按钮,选择图片,如图1.18 所示图 1.18 单击打开本地图片按钮程序正常执行,说明可以在我们电脑上使用EmguCv。接来下让我们一起打开EmguCv的大门, 感受 EmguCv的强大之处。 如果仍然出现初始化异常,请不要着急, 慢慢检查步骤。或者把 Emgucv安装目录下整个bin 文件夹复制到程序的Debug 文件夹下,再设置目标平台。只要坚持下来, 相信总是会有收获的。不要被一些小小的困难所压倒,因为接触一个新的软件的同时,总是会遇到七七八八的问题,解决问题的同时也是学习的过
15、程。EmguCv在资料比较少的情况下, 所遇到的问题会更多。所以这边希望想真正去学习这个的同学,坚持下来。命名空间介绍:C#的命名空间就相当于用来”装类”的一个箱子, 类又相当于用来”装函数”的一个箱子。C#通过命名空间来调用类是非常方便的,操作也很简单。之前我们通过使用Emgu.CV.Structure这个命名空间和Emgu.CV命名空间来调用类Image和 Mat。Emgu.CV.Structure和 Emgu.CV是最基本的两个两个命名空间。Emgu CV命名空间:EmguCv不仅仅只有Emgu.CV.Structure和 Emgu.CV两个命名空间。EmguCv和 C#接口的命名空间源
16、于添加引用的.dll(动态链接库文件)文件,也就说明了不同的.dll(动态链接库文件)文件有不同的命名空间。这边列举主要的命名空间如表1.1 所示。动态链接库文件存在命名空间名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 39 页 - - - - - - - - - 此文档来源于网络,如有侵权请联系网站删除只供学习交流用表 1.1 动态链接库对应的命名空间如何正确使用命名空间:据表 1.1 不完全列举就有很多命名空间,那么怎样正确使用EmguCv的命名空间呢?笔者举个例
17、子来介绍如何正确添加命名空间。比如OrbFeaturesFinder (ORB特征查找类)。当我们没有添加引用.dll 的同时也没有using 命名空间,出现错误如图 1.19 所示。图 1.19 这时我们需要用到EmguCv自带的一个文档查询库,如图 1.20 所示。该文件在于EmguCv安装目录下。Emgu.CV.dll (最基本的动态链接库文件)Emgu.CV.Cvb、 Emgu.CV.CvEnum、 Emgu.CV.Features2D、Emgu.CV.Flann 、 Emgu.CV.Geodetic 、 Emgu.CV.Reflection 、Emgu.CV.Structure、Em
18、gu.CV.Tiff、Emgu.CV.Util、Emgu.CV.VideoSurveillance; Emgu.Util.dll Emgu.Util.TypeEnum; Emgu.UI.dll Emgu.CV.UI (为之前添加EmguCv控件的命名空间,控件也是类) ; Emgu.CV.Contirb.dll Emgu.CV.BgSegm 、Emgu.CV.Face 、Emgu.CV.Text 、Emgu.CV.XFeatures2D; Emgu.CV.Cuda.dll Emgu.CV.Cuda (Cuda 加速) ; Emgu.CV.ML.dll Emgu.CV.ML 、Emgu.CV.M
19、L.MlEnum、Emgu.CV.ML.Structure (机器学习) ; Emgu.CV.Stitching.dll Emgu.CV.Stitching (图像拼接); Emgu.CV.OCR.dll Emgu.CV.OCR (Optical Character Recognition,光学字符识别). 等等。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 39 页 - - - - - - - - - 此文档来源于网络,如有侵权请联系网站删除只供学习交流用图 1.2
20、0 文档查询库操作步骤如下:【点击搜索】 【输入搜索内容 (OrbFeaturesFinder) 】【点击列出主题】 【双击搜索到的第一个(如图1.21 所示)】【找到命名空间及动态链接库】名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 39 页 - - - - - - - - - 此文档来源于网络,如有侵权请联系网站删除只供学习交流用图 1.21 搜索相关结果这样我们发现了OrbFeaturesFinder这个类是在命名空间为Emgu.CV.Stitching 中,动
21、态链接库为Emgu.CV.Stitching.dll。Emgu.CV.Documentation介绍:这个文档对于学习EmguCV 的帮助非常大。本人学习EmguCv主要通过三种路径。通过别人写好的demo 去学习 EmguCv ,这个资源毕竟有限。通过学习OpenCV (资料多)过度到 EmguCV 。最后就是通过这个文档学习。接下来讲解如何使用文档自学。【打开文档】【文档界面又侧有所有的命名空间】【每个命名空间下有对应的类】【每个类下面又有不同的方法】。接下来举简单的例子来说明。【点击想去了解的命名空间(Emgu.CV命名空间)】【点击想去了解的类(CvInvoke类) 】【在 Metho
22、ds栏中存在该类的所有函数,函数的右边存在函数的表述(如图1.22所示)】【点击需要使用的函数(Erode ) 】【更详细的函数解析,使用方法和参数(如图 1.23 所示)】 。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 39 页 - - - - - - - - - 此文档来源于网络,如有侵权请联系网站删除只供学习交流用图 1.22 图 1.23 Erode函数详细解析这样通过文档的学习和不断积累的过程,我们最终将会熟练掌握这门技术。EmguCV自带的历程:正如上面
23、所说,我们可以通过别人写好的demo 来学习EmguCv ,开发者专门为我们写好了非常优秀的代码给我们参考,学习。在安装目录中有一个文件夹名字为Emgu.CV.Example。这个文件夹里面有非常多的具有代表性的demo ,如图 1.24 所示。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 39 页 - - - - - - - - - 此文档来源于网络,如有侵权请联系网站删除只供学习交流用图 1.24 EmguCv自带 demo 读者可以通过这些例程更好的来了解和学习
24、EmguCv。本章内容到此为止,接下来会通过录制视频讲解使读者更加详细的了解和使用以上内容。第二章数据结构本章节,我们将学习到 EmguCv常用到的数据结构, 为 EmguCv学习打下坚实的基础。由于EmguCv的数据结构过多,这边主要讲解常用到的数据结构类型。.net 系统中“点”结构类型介绍:Point:为二维坐标系下的”点“类型,以图像左上角为坐标原点。Point类型并非是 EmguCv中的类型,而是在System.Drawing命名空间中。常见创建方法:public Point(int x, int y);/ 指定坐标创建 Point。public Point(Size sz):/指定
25、大小创建 Point,se宽度为 x 坐标,se 高度为 y 坐标。常见使用方法:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 39 页 - - - - - - - - - 此文档来源于网络,如有侵权请联系网站删除只供学习交流用Point point = new Point(10, 10); int x = point.X;/获得点的 x 坐标。int y = point.Y;/获得点的 y 坐标。PointF:表示二维坐标系下的点, 以图像左上角为坐标原点, 数据类
26、型为单精度浮点类型。在System.Drawing命名空间中。PointF和 Point 具有相同的用法,这边主要分析类型之间的相互转换。Point 系统可以默认转换为PointF 类型。类似于Int 类型可以转成 Float类型。 PointF类型转成 Point类型这边可以使用函数Point结构体中的 Truncate函数实现:public static Point Truncate(PointF value);/ 把 PointF类型转成 Point 类型。Emgu Cv “点”结构类型介绍:MCvPoint2D64f、 MCvPoint3D32f、 MCvPoint3D64f 这 个
27、三 个 点 均 在Emgu.CV.Structure 命名空间中。 MCvPoint2D64f表示二维 64 位双精度浮点类型的点,MCvPoint3D32f表示三维 32 为单精度浮点类型的点。 MCvPoint3D64f表三维 64位双精度浮点类型的点。查看结构类型的使用方法步骤如下:MCvPoint3D64f为例。【如图 2.1 所示】 【右击选中的结构体,单击”转到定义“,或者鼠标选中结构体按下” F12“键。如图 2.2 所示】 【这样可以查看结构体的的信息(如图 2.3 所示) 】查看类或者函数也是这些步骤。图 2.1 图 2.2 名师资料总结 - - -精品资料欢迎下载 - -
28、- - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 16 页,共 39 页 - - - - - - - - - 此文档来源于网络,如有侵权请联系网站删除只供学习交流用图 2.3 MCvPoint3D64f信息常见创建方法:public MCvPoint3D32f(float x, float y, float z)/ 指 定 坐 标 创 建MCvPoint3D32f。常见使用方法:MCvPoint3D64f mcvPoint=new MCvPoint3D64f (0,0,0); 分别获得 X,Y,Z坐标。double x=mcvPoin
29、t.X; double y=mcvPoint.Y; double z=mcvPoint.Z; MCvPoint2D64f 信息如图 2.4。MCvPoint2D64f 的信息操作如上,这边不再列举。图 2.4 MCvPoint2D64f信息双击每个类型前面的符号,便可以查看官方给定的注释。如图 2.5 所示。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 17 页,共 39 页 - - - - - - - - - 此文档来源于网络,如有侵权请联系网站删除只供学习交流用图 2.5 Em
30、guCv “线段”结构类型介绍:在 EmguCv中主要有 LineSegment2D 、LineSegment2DF 、LineSegment3DF表示线段的数据类型,以Emgu.CV.Structure 为命名空间。 LineSegment2D表示 2 维平面整型数据结构的线段。 LineSegment2DF表示 2 维平面单精度浮点数据结构的线 段 。 LineSegment3DF 表 示 3 维 空 间 单 精 度 浮 点 数 据 结 构 的 线 段 。 以LineSegment2DF为例,解析使用方法。(也可以转到定义去了解更全面的介绍信息。如图 2.6 所示。 )常见创建方法:pub
31、lic LineSegment2DF(PointF p1, PointF p2); 指 定 坐 标 点 创 建LineSegment2DF类型。常见使用方法:public PointF Direction get; /获得直线的方向。public double Length get; /获得直线的夹角。public PointF P1 get; set; / 操作直线的首点。public PointF P2 get; set; / 操作图像的末点。public double GetExteriorAngleDegree(LineSegment2DF otherLine);得到两直线的夹角。pu
32、blic int Side(PointF point);/判断点坐标相对于直线的位置。public float YByX(float x);/输入 X点,输出所在直线的Y点。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 18 页,共 39 页 - - - - - - - - - 此文档来源于网络,如有侵权请联系网站删除只供学习交流用图 2.6 LineSegment2DF 结构信息Emgu Cv ”圆形“结构类型介绍:圆形主要包括圆和椭圆两种类型,以下分别介绍。以Emgu.CV.S
33、tructure 为命名空间。CircleF :圆常见创建方法 :public CircleF(PointF center, float radius);/ 指定圆心半径创建CircleF 。常见使用方法:public double Area get; /获得圆的面积。public PointF Center get; set; /操作圆的圆心。public float Radius get; set; /操作圆的半径。Ellipse:椭圆常见创建方法:public Ellipse(RotatedRect box2d);/ 指定带角度的矩阵创建Ellipse类型。public Ellipse(
34、PointF center, SizeF size, float angle)/ 指定参数创建Ellipse类型。Emgu Cv ”三角形“结构类型介绍:EmguCv “三角形” 主要包括 Triangle2DF 、Triangle2DF 、Triangle3DF类型。以 Emgu.CV.Structure 为命名空间。Triangle2DF :二维三角形。常见创建方法:public Triangle2DF(PointF v0, PointF v1, PointF v2);/ 指定三个顶点创建Triangle2DF三角形。常见使用方法:public double Area get; /获得三角
35、形面积。public PointF Centeroid get; /获得三角形重心。/ 依次获得三角形的三个顶点坐标。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 19 页,共 39 页 - - - - - - - - - 此文档来源于网络,如有侵权请联系网站删除只供学习交流用public PointF V0 get; set; ; public PointF V1 get; set; ; public PointF V2 get; set; ; public PointF Get
36、Vertices();/直接获得三角形的三个顶点。Triangle3DF: 三维三角形:常见创建方法:public Triangle3DF(MCvPoint3D32f v0, MCvPoint3D32f v1, MCvPoint3D32f v2);/指定三个 MCvPoint3D32f类型的点创建Triangle3DF 。常见使用方法:public double Area get; /获得三角形面积。public MCvPoint3D32f Centeroid get; /获得三角形重心。/ 依次获得三角形的三个顶点坐标。public MCvPoint3D32f V0 get; set; ;
37、Public MCvPoint3D32f V1 get; set; ; public MCvPoint3D32f V2 get; set; ; Emgu Cv和.Net”矩形“结构类型介绍:我们将会用到三种类型来表示矩形。RotatedRect:RotatedRect :以 Emgu.CV.Structure为命名空间。表示带有旋转角度的矩形。常见创建方法:public RotatedRect(PointF center, SizeF size, float angle)/指定中心,大小,角度创建 RotatedRect类型。常见使用方法:public Rectangle MinAreaRec
38、t(); 获得最小面积的外接矩形。public float Angle;/ 获得角度。public PointF Center;/获得中心点。public SizeF Size; 获得大小。Rectangle:Rectangle 矩形不带旋转角度,或者旋转角度为0,命名空间为System.Drawing并非是 EmguCv矩形。常见创建方法:public Rectangle(Point location, Size size);/指定左上角点和大小创建 Rectangle类型。public Rectangle(int x, int y, int width, int height);/ 指定左
39、上角坐标和宽度,高度创建Rectangle 。常见使用方法 : 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 20 页,共 39 页 - - - - - - - - - 此文档来源于网络,如有侵权请联系网站删除只供学习交流用public bool Contains(Point pt);/判断矩形是否包括点。public static Rectangle Truncate(RectangleF value);/RectangleF 类型强制转成 Rectangle类型。public
40、static Rectangle Union(Rectangle a, Rectangle b);/ 获得两个矩形的并集。public static Rectangle Intersect(Rectangle a, Rectangle b);/ 获得两个矩形的交集。RectangleF :为 Rectangle的 Float 类型,在精度上比较高,其他的方法基本一致,这边不再重复介绍。命名空间为System.Drawing 。颜色空间结构介绍:Rgb: (三通道颜色空间 )RGB色彩模式是工业界的一种颜色标准,是通过对红(R)、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各
41、式各样的颜色,RGB即是代表红、绿、蓝三个通道的颜色(又称三原色),这个标准几乎包括了人类视力所能感知的所有颜色,是目前运用最广的颜色系统之一。 颜色空间模型如图 2.7所示 (采用 01二值模型构建,通常使用 0255表示) 。图 2.7 RGB颜色空间常见创建方法:public Rgb(double red, double green, double blue);/ 指定每个通道的值进行创 建 Rgb 。public Rgb(Color winColor);/指定颜色进行创建Bgr。常见使用方法:Rgb Rgb=new Rgr (255,0,0);/ 创建红色颜色。Rgb _R gb=ne
42、w Rgb (Color .Red); 创建红色颜色。Rgba : (四通道颜色空间)Rgra基于 Rgb的基础上,在添加一个通道a。A:alpha 表示透明度。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 21 页,共 39 页 - - - - - - - - - 此文档来源于网络,如有侵权请联系网站删除只供学习交流用Gray: (单通道颜色空间)Gray 为单通道灰度图像空间,通常用于把多维颜色空间降维为单通道Gray格式。Hsv:这个模型中颜色的参数分别是:色调(H) ,饱和
43、度( S) ,明度( V) 。色调:用角度度量,取值范围为0360,从红色开始按逆时针方向计算,红色为 0、黄色为 60、绿色为 120、青色为 180、蓝色为240、品红为 300。饱和度 : 饱和度 S 表示颜色接近光谱色的程度。一种颜色,可以看成是某种光谱色与白色混合的结果。其中光谱色所占的比例愈大,颜色接近光谱色的程度就愈高,颜色的饱和度也就愈高。饱和度高,颜色则深而艳。光谱色的白光成分为0,饱和度达到最高。通常取值范围为0%100%,值越大,颜色越饱和。明度:明度表示颜色明亮的程度,对于光源色,明度值与发光体的光亮度有关;对于物体色,此值和物体的透射比或反射比有关。通常取值范围为 0
44、%(黑)到 100%(白) 。Hsv颜色空间模型,如图2.8 所示。图 2.8 Hsv 颜色空间模型Hls:Hls 颜色空间,是通过对色相(H)、饱和度 (S) 、明度 (L)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 22 页,共 39 页 - - - - - - - - - 此文档来源于网络,如有侵权请联系网站删除只供学习交流用色相(H):如图 2.9 所示。饱和度 (S):如图 2.10 所示。明度 (L):如图
45、2.11 所示。图 2.9:色相 (H) 颜色模型图 2.10 饱和度 (S) 颜色模型图 2.11 亮度(L) 颜色模型Bgr:Bgr颜色空间与 Rgb类似(通道位置前后颠倒) ,常用于 EmguCv颜色空间。Bgra:Bgra颜色空间在 Bgr 的基础上添加 a 通道。 A:alpha 表示透明度。Ycc :YCbCr :Y:luminance ,表示光的浓度且为非线性、Cb和 Cr 则为蓝色和红色的浓度偏移量成份,常用于肤色聚类算法。其Cb,Cr 颜色模型如图2.12所示。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名
46、师精心整理 - - - - - - - 第 23 页,共 39 页 - - - - - - - - - 此文档来源于网络,如有侵权请联系网站删除只供学习交流用图 2.12 CbCr颜色模型常见创建方法:public Ycc(double y, double cr, double cb);/ 使用特定的参数创建Ycc 。Xyz :Xyz基色系统。是 CIE的一个颜色系统,等能量的蓝、绿、红三原色分别作为 X、Y、Z轴构成颜色空间。与RGB相关的相像的基色系统,但更适用于颜色的计算。常见创建方法:public Xyz(double x, double y, double z);/ 指定 XYZ的值
47、创建 Xyz 。Lab:为了解决颜色空间的感知一致性问题,专家们对CIE 1931 XYZ系统进行了非线性变换,制定了CIE 1976 L*a*b*颜色空间的规范。为非自照明的颜色空间。Lab对颜色的感知更均匀。 L:Luminosity 亮度,a 和 b 的值域都是由 +127至-128,其中 +127 就是红色,渐渐过渡到 -128 的时候就变成绿色;同样原理,+127 是黄色, -128 是蓝色。常见创建方法:public Lab(double x, double y, double z);/指定参数创建 CIE lab 颜色。Luv:用于自照明的颜色空间,叫做CIELUV 。L表示物体
48、亮度, u 和 v 是色度。常见创建方法 :public Luv(double x, double y, double z);/ 使用特定的参数创建Luv。关于 CIE (Commission Internationale de LEclairage )更多资料见百度百科CIE 。MCvScalar :MCvScalar是一个具有单元素到四元素之间的一个,每个元素表示图像每个通道的颜色。如果采用BGR颜色空间表示红色,那么MCvScalar的值名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - -
49、- 第 24 页,共 39 页 - - - - - - - - - 此文档来源于网络,如有侵权请联系网站删除只供学习交流用为 MCvScalar(0,0,255) 。类型跟随图像颜色类型,如果图像颜色空间为HSV则 MCvScalar的通道分别表示 H,S,V。常见创建方法:public MCvScalar(double v0, double v1, double v2, double v3);/指定每个通道的颜色值,这边最多为四通道。数组:相信读者对以 为标志的数组操作已经非常熟悉。这边用几个简单的例子概括以为标志的数组操作。简单例子:int ,data=new int,1,2,3;/ 创建
50、一个三行一列Int 类型的数组。Bgr bgr_data=new Bgr5;/ 创建一个一维长度为5 的 Bgr 数组。List: List 是常用与 Emgu Cv处理数组的一种格式。 List (T 表示泛型)比做一个盒子, 盒子里面可以装T数据,而 List 也同时可以被 List装起来。常用的方法:List data=new List ();创建一个List类 型 , 里 面 存 储MCvPoint2D64f 数 据 类 型 , 相 当 于MCvPoint2D64f的一维数组。ListList data=new ListList (); 创 建 一 个List类 型 , 里 面 存 储