EMGUCV基础(6)

2019-04-17 15:37

常用的方法:

public void Push(byte[] value);//向数组中添加数据。 public byte[] ToArray();//VectorOfByte转成byte[]类型。

类型转换

在图像处理中存在各种各样的数据类型,当我们不熟悉如何把一种类型转换成另外一种类型,这对于编程者带来非常多的困扰。接下来主要分析Emgu Cv常用到的数据类型。

常用容器:

Bitmap:

Bitmap位图文件,是Windows标准格式,也是.Net主要的图像存储格式。

Bitmap类以System.Drawing为命名空间,继承抽象类Image,同时里面封装了非常多对图像操作的函数。

Image

Image是Emgu Cv3.0版本之前的主要存储图像类型,

同时也在3.0之后也是兼容。TColor是一个颜色类型,TDepth是一个图像深度类型。Image的父类为(CvArray, IImage, IDisposable, ICloneable, IInputOutputArray, IOutputArray, IInputArrayOfArrays, IInputArray, IEquatable)。当有些函数的参数为以上类型,就可以用Image来替换。以Emgu.CV为命名空间。

Mat:

在Emgu Cv3.0版本之后(包括3.0版本)才出现的,Mat的父类为

(MatDataAllocator, IImage, IDisposable, ICloneable, IInputOutputArray, IOutputArray, IInputArrayOfArrays, IInputArray, IEquatable, ISerializable)。当有些函数的参数为以上类型,就可以用Mat来替换。以Emgu.CV为命名空间。

UMat:

在大多数情况下,您应该使用Matrix类来替换。UMat父类为(MatDataAllocator, IImage, IDisposable, ICloneable, IInputOutputArray, IOutputArray, IInputArrayOfArrays, IInputArray, IEquatable, ISerializable),以Emgu.CV为命名空间。

常用容器转换:如表2.1所示。

原始类型 表 2.1 常用容器类型转换

目标类型 实现代码 Bitmap Image Image Bitmap Image Mat Mat Image Mat UMat UMat Mat UMat Image Image UMat Image m = new Image(_bitmap);//_bitmap为Bitmap类型。 Bitmap _bitmap= image.ToBitmap();或者image.Bitmap;//image为Image类型。 Mat _mat = image.Mat//image为Image类型。或者Mat _mat = image.ToUMat().ToMat(Emgu.CV.CvEnum.AccessType);//先转成UMat再转成Mat。 Image image=_mat.ToImage ();//_mat为Mat类型。 UMat umat = _mat.ToUMat(Emgu.CV.CvEnum.AccessType);//_mat为Mat类型。这边需要使用一个枚举类型,标志UMat的接受类型。 Mat mat = umat.ToMat(Emgu.CV.CvEnum.AccessType);//umat为UMat类型,这边需要使用一个枚举类型,标志Mat的接受类型 Image image=umat.ToImage ();//umat为UMat类型。 UMat umat = image.ToUMat//image为Image类型。

颜色类型转换:

在上面内容中已经介绍过Emgu Cv存在的颜色空间。接下来,做颜色空间的转换操作。这边主要对Image和Mat容器的颜色空间介绍。

Image

可以通过对TColor的更改从而更改颜色空间,对TDepth更改从而更改

代码如下:

Image image = new Image().Convert();

例子:

Image ycc_iamge = new Image(100, 100, new Ycc(0, 255, 0));//指定参数创建一个Image 格式的图像。

Image bgr_image = ycc_iamge.Convert();//把Image格式的图片转成Image

这边我还是比较喜欢Image类型的容器,可以清晰看出图像的颜色空间和储存数据类型。

Mat:

通过CVInvoke类的CvtColor函数来实现:

public static void CvtColor(IInputArray src, IOutputArray dst, ColorConversion code, int dstCn = 0);//一种颜色空间转成另外一种颜色空间:

参数解析:

IInputArray src,:输入图像。 IOutputArray dst:目标图像。

ColorConversion code:Emgu.CV.CvEnum的一个枚举标识符。

这边总共有140多种类型转换,这边就不全部列举(如表2.2所示)。

表2.2 颜色类型转换标识符

标识符 转换类型

Bgr2Gray = 6 Bgr转成Gray

Bgr2Hsv = 40 Bgr转成Hsv

Bgr2Lab = 44 Bgr转成Lab

Hsv2Rgb Hsv转成Bgr

..... 等等

本章内容到此为止,接下来会通过编写代码和录制视频讲解使读者更加详细的了解和使用以上内容。

第三章 图像处理基础篇

1. 创建图片:

Image:

采用Image类来创建图片,有九种方法。如图3.1所示。

图 3.1 Image创建图片。

常用的的方法如下:

public Image(Bitmap bmp);//采用Bitmap图像创建。 public Image(string fileName);//指定路径创建图像。

public Image(int width, int height, TColor value);//采用固定大小和颜色创建图像。

详细介绍public Image(string fileName)方法:

string fileName:为图片的路径。如果直接添加图片的名字,系统将会自动添加Application.StartupPath+\。如图3.2所示。

Imageimage=newImage(Application.StartupPath+\\你好.jpg\创建工程运行目录下的“你好.jpg”图像。

Image image1 = new Image(\你好.jpg\创建工程运行目录下的“你好.jpg”图像。

Image image2 = new Image(@\Desktop\\你好.png\创建桌面一张你好.png图片。

Image image3 = new Image(\

Desktop\\\\你好.png\创建桌面一张你好.png图片。

OpenFileDialog op = new OpenFileDialog();

if(op.ShowDialog ()==DialogResult .OK ) {

Image image4 = new Image

(op.FileName);//通过打开文件对话框来加载选中的图片。

}

图 3.2 Image 指定目录创建图像

Mat:

采用Mat来创建图片总共有8总方法,如图3.3所示。

图 3.3 Mat创建图像方法

常用到的方法如下:

public Mat();//实例化一个空容器。

public Mat(string fileName, LoadImageType loadType);//指定目录指定类型创建图片。

public Mat(int rows, int cols, DepthType type, int channels);//指定大小,类型,通道数创建Mat容器。

详细介绍第二种方法:

String fileName:和Image参数中的string fileName一样。

LoadImageType loadType:是一个Emgu.CV.Cvenum的一个标识符。标识图像类型,类似于Image中的TColor和TDepyh类型。

标识符如表3.1所示。

表示符 Unchanged = -1 Grayscale = 0 TCloor类型 8位bit类型(byte) 8位类型(byte) TDepth类型 无关 灰度(gray)


EMGUCV基础(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2017年Fenbi模考大赛第七季试题及答案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: