可能是本人文化层次比较低的原因,做事总喜欢自己的方式,这深深影响了编程的风格。我感觉在C#中图像的加载显示已经做的不错了,所以感觉没必要调用EmguCv中的函数来实现加载显示等功能了,在C#中,通常用的简单的图像处理过程,我们可以自己写,甚至在不安全方式下用上指针来做。比如图像的灰度化等。但是有些图像和 视屏的处理过程,如果自己写,太费事,EmguCv中有写好的,我们何不调用,甚至有时候我们可以直接调用C++或者C写的代码,我们只是用C#完成人机交互这个过程,而核心处理的可以调用各种,比如EmguCv中的方法,C或者C++写的方法,反正目的就是保证综合的性能比较好,即有好的人机交互,又有比较快的速度。
以前在C#中做过图像灰度化,然后二值化的代码,是自己写了一个类,调用处理的,现在我们有现成的EmguCv,因此今天我尝试做一下用C#只处理加载显示等任务,而用EmguCV处理灰度化和二值化。
前面基础的略,直接到所有都配置好,然后开始加载和处理过程,基础的不知道可以去我百度文库看看。
现在已经用C#设计好基本的功能了,即加载显示,保存图片,还可以关闭。如下图。
接下来我们调用EmguCV处理这些图片。
首先是灰度化,这里涉及到几个技巧,即从C#中承载图像的类型转换到EmguCv中承载图像的类型;
用的函数为:
Image<Bgr, Byte> img1 = newImage<Bgr, Byte>(curBitmap);
参数根据格式调整,这里是把彩色的C#中curBitmap类型转换为EmguCv中的相对应的类型,接下来灰度化,处理函数为:
Image<Gray, Byte> Gray_image =img1.Convert<Gray, Byte>();
最后涉及到的是从EmguCv中的承载图像的类型转换为C#中的类型,使用的函数为:XX.ToBitmap();
其中XX代表在EmguCV中实例化的对象,这里的化是存放转换为灰度图像的img1;
所以从EmguCv转换为C#中承载类的函数写为:
curBitmap= Gray_image.ToBitmap();
同理可以实现对灰度化的二值化,代码贴在最后边,下面是结果图:
全部的代码在下面,由于只是个例子,没有特定对应的名字,看起来有些不好看,不过不要在意这些。
usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;