C#.net 环境下使用OpenCV(一)
来源:互联网 发布:工业以太网知乎 编辑:程序博客网 时间:2024/05/13 22:12
转自: http://blog.csdn.net/converse0525/article/details/5556061
首先介绍一下EmguCV 。
EmguCV a是.NET 平台下对OpenCV 图像处理库的封装。也就是OpenCV的.NET 版。它运行在.NET 兼容的编程语言下调用OpenCV 的函数,如C#、VB、VC++、IronPython 等。这个封装库可以在Mono 下编译和在Linux / Mac OS X 上运行。
接着简要介绍一下EmguCV的安装步骤:
1、首先保证你的电脑已经装好了openCV,并且保证环境变量已经设置好。具体参照OpenCV官方中文网站,写得很清楚。
2、下载EmguCV压缩包,其实就是几个可以在Visual Studio2005/2008中引用OpenCV的函数的dll库。我下的是1.50版,“Emgu.CV.Windows.Binary-1.5.0.0.zip”。解压该压缩包,并把其DLL拷贝在OpenCV安装目录下的Bin文件夹里。
3、新建一个c#窗体应用程序,添加Bin目录下“Emgu.CV.dll”,“Emgu.Util.dll”等DLL的引用,还有些窗体的控件,主要是將 Emgu.CV.UI.dll 加入工具箱中,加入後會出現 ImageBox、HistogramCtrl。
4、然后,再程序的开头中加上 using Emgu.CV; using Emgu.Util;等命名空间之后就可以用EmguCV中所有的库函数了。
然后说说几个使用EmguCV的基础问题及要注意的地方:
1、在.net中使用OpenCv和EmguCv时,必须在三者支持的图像格式之间进行转换。.net中用Bitmap类来承载图像,OpenCv中用IplImage指针来承载图像,EmguCv中用Image<TColor,TDepth>来承载图像。
读入图像的方法有几种,在OpenCV中,可以使用:
IntPtr srcImage;//IntPtr代替IplImage*
srcImage = CvInvoke.cvLoadImage("lena.jpg",Emgu.CV.CvEnum.IPL_DEPTH.IPL_DEPTH_8U,1);
在EmguCV中,建议使用Image类来实现读入操作,写法如下
//读入一张BGR图像,要将lena.jpg放入DEBUG目录下。
Image<Bgr, byte> img = new Image<Bgr, byte>("lena.jpg");
//ToBitmap()将IImage格式转换为Bitmap格式,便能为PictureBox所用了。
pictureBox1.Image = img.ToBitmap();或者pictureBox1.Image=img.Bitmap;
Image格式还可以转换成IntPtr,如:
srcImage = img.Ptr;
Image类实在功能强大,还有封装了很多常用的图像处理的函数。
2、图片的数据处理
可以使用c++中OpenCV的指针访问的办法,但是在c#.net的环境下,是不安全代码,要加上unsafe关键字
unsafe
{
((byte*)img.MIplImage.imageData + img.MIplImage.widthStep * i)[j] = 0;
}
建议使用EmguCV的写法
//对Image<Bgr,byte>的第y行第x列进行读取和写入操作。
Bgr color=img[y,x];
img[y,x]=color;
Bgr格式的数据可以通过Bgr.Blue,Bgr.Green,Bgr.Red访问,Gray格式的数据可以通过Gray.intensity访问,所有数据都是可以读写的。
3、判断一个视频是否读到文件尾,不能用null,要用一个为空类型的IntPtr,就是IntPtr eof = new IntPtr(),看其是否与eof相等。
4、IplImage*,CvCapture*等指针在C#中都用IntPtr来代替,且其中没有cvGetMCvSize函数,故用cvGetImageROI来暂时代替
5、由于C#中没有取地址符号&,所以在这里所有的取地址都用引用来代替,即ref。
6、OpenCV中的所有的预定义的常量,都封装在Emgu.CV.CvEnum这个枚举类型里面。
参考:
1、http://www.cnblogs.com/xrwang/archive/2010/01/26/TheInteractionOfOpenCv-EmguCvANDDotNet.html
2、http://hi.baidu.com/pengjun/blog/item/4ce4cb80213c3ddf9123d9c3.html
3、http://www.dotblogs.com.tw/chou/archive/2009/06/13/8812.aspx
4、http://hi.baidu.com/barty/blog/item/0bc7353eac40393671cf6c42.html
- C#.net 环境下使用OpenCV(一)
- C#.net 环境下使用OpenCV(一)
- C#.net 环境下使用OpenCV(一) 转
- C#.net 环境下使用OpenCV
- C#.net 环境下使用OpenCV
- .Net下使用OpenCV
- QT下使用opencv环境
- opencv学习之路一 ubuntu 环境下qt4.7 +opencv 2.4.3使用
- C#.net中使用Opencv
- CKEditor在asp.net环境下的使用一例
- CKEditor在asp.net环境下的使用一例
- linux环境下使用c语言实现shell(一)
- VC++2005环境下OpenCV的使用
- C#.NET下使用Sqlite
- opencv (一) 环境搭建
- linux环境下C编程(一)
- 在linux环境下 编译opencv (C++)工程
- 使用Eclipse + OpenCV + C++ 环境搭建(一)
- sql 基本语句
- 随笔分类 - 代码评析与重构
- Linux gcc编写线程时的问题
- linux 驱动程序头文件
- FreeRTOS STM32移植笔记
- C#.net 环境下使用OpenCV(一)
- 常用git命令总结
- spring mvc 使用kaptcha生成验证码 maven
- 软键盘顶Popup
- java中的运算符
- 数组指针与指针数组的比较
- 行走在广东 看潮连古渡风光依旧
- 使用TCP/IP进行网际互连 --- 确认、重传和超时
- JavaScript实现透明背景切换