关闭

C#.net 环境下使用OpenCV(一)

4887人阅读 评论(0) 收藏 举报
分类:

转自: 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

 

0
0
查看评论

C#.net 环境下使用OpenCV(一)

首先介绍一下EmguCV 。EmguCV a是.NET 平台下对OpenCV 图像处理库的封装。也就是OpenCV的.NET 版。它运行在.NET 兼容的编程语言下调用OpenCV 的函数,如C#、VB、VC++、IronPython 等。这个封装库可以在Mono 下编译和在Linux / Mac ...
  • converse0525
  • converse0525
  • 2010-05-04 15:13
  • 48879

OpenCV笔记大集锦

整理了我所了解的有关OpenCV的学习笔记、原理分析、使用例程等相关的博文。排序不分先后,随机整理的。如果有好的资源,也欢迎介绍和分享。 1:OpenCV学习笔记 作者:CSDN 数量:55篇博文 网址:http://blog.csdn.net/column/details/opencv-manua...
  • langb2014
  • langb2014
  • 2016-05-11 23:30
  • 18675

.NET + OpenCV & Python + OpenCV

最近需要做一个图像识别的GUI应用,权衡了Opencv+ 1)QT,2)Python GUI,3).NET后选择了.NET。。。本文给出C#+Opencv和Python+Opencv的相应参考,节省大家时间。
  • abcjennifer
  • abcjennifer
  • 2013-12-26 21:08
  • 12096

C#中使用OpenCV等库进行图像处理

吐血推荐以下在C#下开发图像处理应用和研究能用的开源的库,还有很多更强悍的功能库,但是没有源代码的不一一列出,一下库都经过测试,我正在使用,欢迎交流!http://www.emgu.com/wiki/index.php/Tutorial#Emgu,这个库封装了OpenCV,可以在C#中使用OpenC...
  • lulu831110
  • lulu831110
  • 2010-02-03 13:57
  • 15845

终于干了点正事。。三天用了三个库opencv、emgu、aforge.net[2011.7.30]

这阵子,确切说这几天,还是看了好多东西的。虽然无用功居多。 上篇日志说的东西做完以后暂时就没事了,然后窝实验室吹着空调做我的小屋。 后来实在觉得无聊找了点事做。 第一天是打算消除视频水印的。其实最土或者说其实最有效的方法是单帧PS,但是,明显我不是这么勤快的人。我学的可不是
  • tutuguaiguai0427
  • tutuguaiguai0427
  • 2011-07-30 11:18
  • 5749

C#调用openCV函数及其移植

众所周知,OpenCV是一个图形图像处理方面的库,里边封装了许多有用的函数。网上也有许多很实用的教程。但是,大部分都是使用C++进行开发。这段时间一直在做一个项目,过程中踩了不少坑,谨以此文提醒自己,留下记录。 首先,上某度查找“C#调用OpenCv”得到的结果大部分是关于EmguCv的使用。不得不...
  • u012991190
  • u012991190
  • 2017-05-08 21:40
  • 4195

C#下的OpenCv----EmguCV入门

介绍了C#下使用OpenCV的一些基础,属于入门级资料。
  • lbd2008
  • lbd2008
  • 2011-04-13 18:39
  • 10538

在VS2010环境下配置opencv,编程语言为c#

具体内容如下:  用一个实验完成在c#配置的opencv环境下,结合自己的界面实现图像灰度化和二值化处理,然后实现通过串口工具将图像数据从串口传出(这里以本实验所用环境加以说明)。 ①首先要将编程环境配置好。 ⑴首先将vs2010下载安装,然后下载了emgucv-windows-...
  • u013432145
  • u013432145
  • 2015-04-13 17:18
  • 2372

C#调用C++、Opencv的Dll

C#调用C++、Opencv的代码可以通过托管和非托管两种形式 非拖管的形式即是采用[DllImport]的形式,这种形式只能调用的C++的函数, 托管的形式用的是ref,可以调用C++类中的方法 首选介绍下非托管的形式: 一、无参数传递下的非托管形式 (1).C++中建立32为dll格式应用程序 ...
  • u010647842
  • u010647842
  • 2016-08-25 16:27
  • 2419

C#调用 opencv cv::Mat 图像, 采用折中方法

手把手教你如何让C#调用opencv里面的 cv::Mat or IplImage* C# 用于界面的制作要比MFC高效许多,但是有时候为了效率需要用C++程序,这样就涉及到了把C++核心算法程序做成dll,在C#中进行调用。
  • yeyang911
  • yeyang911
  • 2016-04-15 08:56
  • 7450
    个人资料
    • 访问:1268549次
    • 积分:13728
    • 等级:
    • 排名:第1108名
    • 原创:166篇
    • 转载:168篇
    • 译文:21篇
    • 评论:193条
    最新评论