EmguCV学习 与opencv的区别和联系
2016-05-17 09:36
218 查看
openCV是因特尔的一个开源的视觉库,里面几乎包含了所有的图像处理的经典算法,并且采用C和少量的C++编写,运行效率很高,对于做图像处理这方面工作的,认识opencv是必须的工作。不过opencv有个很大的不足,这在于它几乎没有提供gui这方面接口,很难满足目前应用程序开发的需要,而万恶的MFC框架丑陋的界面也成为了我的噩梦,MFC与opencv和界面优化几乎让我在图像处理这一块儿无法动弹。
C#是.net平台上的明星语言,可以很容易做出漂亮的界面。EmguCV是将opencv封装的一个.net库可以被VC++,VC#,VB.net调用。网上对于EmguCV的介绍很少,不是因为它没用,而是因为它的使用方法几乎和opencv一摸一样,opencv的资料完全可以直接用于EmguCV。不过不少新手在使用EmguCV在使用几次之后便放弃。这有以下几个原因:1.舆论影响,很多人都说C#的运行效率低,采用C/C++,opencv是C和C++编写的,理所当然应该在VC++中运行,图像处理又是一个计算量很大的工作,C#不行。C#运行效率肯定比C/C++差,但是采用混合编程的方法就可以啦,用C#的框架和运行机制,计算交给C就好啦。EmguCV很多处理函数都是采用托管调用opencv。这个在EmguCV的安装包里可以看到,里面含有所有Opencv的dll。
2.缺少资料,学习受挫而放弃(我放弃这个大概有半年)。不得不承认EmguCV方面的学习资料实在是太少啦。很多时候出现问题,在网上基本上找不到答案。而且EmguCV前期版本对opencv封装不全面,很多基本的函数没有被封装,使用起来很不方便,网上很多人以讹传讹,编写很困难。不过使用2.3版本就没有这个问题,opencv基本函数都得到了很好的封装。opencv图像处理的函数都封装在cvInvoke中
而Image<>结构是连接opencv与emgucv的重要桥梁。其中C#的Intptr类型可以很好地传递IplImage*指针结构,下面我用一个实验来验证我的判断。
创建一个winform工程,添加一个button和picturebox控件
添加如下代码
Capture cam;
private void btopen_Click(object sender, EventArgs e)
{
cam = new Capture();
Application.Idle += new EventHandler(processframe);
}
private void processframe(object sender, EventArgs arg)
{
Image<Bgr, Byte> frame = cam.QueryFrame();
Image<Gray,Byte> Ecanny=frame.Convert<Gray,Byte>();
CvInvoke.cvCanny(Ecanny.Ptr, Ecanny.Ptr, 50, 150, 3);
//cvCanny是opencv中常用的函数,原本的参数应该是IplImage*类型,这里使用Intpr代替,即Ecanny.ptr
pictureBox1.Image = Ecanny.Bitmap;
}
运行结果如下
当然如果只是简单的canny算法,使用EmguCV封装的结构Image<>更加简单,将代码如下图所示修改
运行结果如下图所示
上述实验表明,EmguCV可以很好地连接C#与opencv,能够弥补opencv在gui这方面的不足,有利于机器视觉开发者得工作
相关文章推荐
- Linux编程之《守护进程》
- ”运维离不开安全 安全没有运维也就没有价值“理论下的隐藏意义
- linux基础目录结构
- arm-linux交叉编译ACE
- 使用Nginx反向代理 让IIS和Tomcat等多个站点一起飞
- 正向代理与反向代理的区别
- 解决导航栏返回按钮与Pop手势冲突的问题
- Linux系统使用ps命令查看进程所占cpu和内存比例
- nginx常用命令
- 适合kali Linux 2.0 的源码(中科大,阿里云、163、上海交通大学源码)
- 海量数据的topK问题
- PYTHON的程序在LINUX后台运行
- windows环境下使用nginx
- Tomcat与Jdk的版本匹配
- opencv 在windows 7 上面不能打开视频的原因
- 通过设置nginx的client_max_body_size解决nginx+php上传大文件的问题
- Redhat6.4替换Centos6 yum及163的源
- Nginx+php-fpm 502 504问题
- 查看apache服务器运行状态(php5.5以上)
- 在linux服务器上装svn版本管理,自动部署代码到项目