最经做一个项目,底层调用openCV编写的图像处理程序,用户界面采用C#编写。 于是学习了相关技术,总结如下:

C#编写的是托管代码,编译生成微软中间语言,而普通C++代码则编译生成本地机器码,这两种语言不能直接混合编程。常见的方式是:

1)将本机C++代码(指非托管C++)编译成一个dll,供C#调用,调用方法为 [DllImport(×××.dll)] 。但是这里只能从 DLL 导出函数,不能导出类(还没有测试能否导出变量)。不能导出类是因为本机C++是非托管的,与C#的语言方式不兼容。也就是说,不能将此类dll作为引用 添加到C#工程中,IDE会提示不是一个程序集。这种方法因为无法导出类,对习惯面向对象编程的人来说,使用起来也不方便。

2)利用CLR C++(指托管C++)编写输出类库,供C#使用,由于CLR C++和C#都符合CLS规范,所以两者可以无缝集成,在一个解决方案里包含这两种语言的项目。生成的DLL可以导出类。这种方法显然不适用于我的情况,因为openCV代码并非托管C++代码,无法直接编译成可供C#调用的类。

3)托管C++和C#一样编译成为微软中间语言,这样就可以和C#良好地通信,即可以在c#中使用托管C++类。同时,托管C++可以调用本地C++的类和函数,一个托管C++的程序集可以嵌套本地C++编译的机器码。这样的特征决定了托管C++可以成为C#和本地C++之间的良好桥梁。所以可以让C#以调用托管C++,而托管C++调用本地C++的类和函数。换句话说也就是用托管C++给本地C++代码做一个外壳供C#调用。这里的本地C++代码就是我们要调用的opencv库函数,托管C++代码就是我们基于openCV编写的图像处理函数。由于这些函数是托管代码,所以可以被C#直接调用。

具体的实现过程可以参考百度文库的文章:

http://wenku.baidu.com/view/6accbfff9b89680203d8256b.html

C#调用opencv的更多相关文章

  1. Atitit 图像处理 调用opencv 通过java  api   attilax总结

    Atitit 图像处理 调用opencv 通过java  api   attilax总结 1.1. Opencv java api的支持 opencv2.4.2 就有了对java api的支持1 1. ...

  2. Lua 调用 Opencv 的方法

    Lua 调用 Opencv 的方法 最近想用 Lua 调用 Opencv 进行相关像素级操作,如:bitwise_and 或者 bitwise_or,从而完成图像 IoU 的计算. 那么,怎么用 Lu ...

  3. matlab和C/C++混合编程--调用opencv

    最近的我们已经将整个项目搭起来了,项目比较复杂.由于我们做的是检索系统,所以我们用asp.net(c#)做了网页,但是算法的实现是在matlab下,所以我们不得不用matlab生成动态链接库dll,然 ...

  4. csharp通过dll调用opencv函数,图片作为参数

    [blog 项目实战派]csharp通过dll调用opencv函数,图片作为参数          ​一直想做着方面的研究,但是因为这个方面的知识过于小众,也是由于自己找资料的能力比较弱,知道今天才找 ...

  5. 【kate总结】matlab调用opencv总结

    正常情况下,编写好matlab调用opencv的代码. 1.输入   MEX XX.CPP(所有的mex都要编译) 2.将生成的.mexw64 放到要调用的文件夹下即可 出错总结: 本人写的matla ...

  6. matlab调用opencv函数的配置

    环境: VS2010 活动解决方案平台x64 WIN 8.1 Opencv 2.4.3 Matlab 2012a 1.  首先保证vs2010能正确调用opencv函数, 2.  Matlab中选择编 ...

  7. OpenCV4Android开发之旅(一)----OpenCV2.4简介及 app通过Java接口调用OpenCV的示例

    转自:  http://blog.csdn.net/yanzi1225627/article/details/16917961 开发环境:windows+ADT Bundle+CDT+OpenCV-2 ...

  8. (原+转)Eclipse中Android调用OpenCv

    大部分都是参考下面的网址,如果感觉看起来不舒服,可以直接查看原网址.最后遇到了一点问题: Description      Resource Path Location   Type E:/~\cod ...

  9. windows下Qt Creator5.1.0编写程序以及调用OpenCV库

    系统说明 最近使用opencv编写程序,程序编的差不多就学习使用QT加个界面,首先声明下本人的系统和使用的软件版本, 系统: windows xp QT IDE:QT Creator5.1.0 Ope ...

随机推荐

  1. android apk简单反编译

    1. 查看或者提取资源文件:     使用谷歌官方工具apktool,命令行如下: apktool d xxx.apk xxx_decode d代表反编译,xxx.apk为你要反编译的apk,xxx_ ...

  2. 微信公开课PRO版张小龙演讲全文

    今天,微信当家人张小龙通过微信官方账户发布了一则视频,视频中张小龙阐述了微信对于开放平台的一些理念和方向.张小龙用八点概括.以下是张小龙发言: 各位参加微信公开课的朋友们,大家好. 首先很遗憾这一次不 ...

  3. 微信小店开发(2) DIY货架

    微信小店的货架支持开放给开发者使用,即开发者可以将自己的页面作为货架,通过JavaScript API来调起微信客户端原生的商品详情页. 请注意:1. 开发者需要预先通过1.1中的增加商品API,预先 ...

  4. eclipse打开jar包出现乱码问题解决方法

    今天做项目时候,用eclipse打开.class文件出现乱码问题.jar编码和本地编辑器编码格式不对造成的错误. 首先我们打开eclipse,点击菜单下的window-->preferences ...

  5. javascript实例学习之三——类新浪微博的登录框

    该登录框和百度的搜索框类似,可以实现如下效果: 1.文字输入时自动弹出提示层 2,提示层根据输入文字进行自动过滤 3,提示层可以使用上下按键进行选择 4,提示层可以点击或者回车来确认输入 微博登录框h ...

  6. ASP.NET MVC Filter

    http://stackoverflow.com/questions/6940371/asp-net-mvc-request-filters http://afana.me/post/aspnet-m ...

  7. Leetcode: Longest Substring with At Least K Repeating Characters

    Find the length of the longest substring T of a given string (consists of lowercase letters only) su ...

  8. Matlab基本功能:自定义函数、添加块注释、定时器的试用

    1.自定义函数 新建一个m文件 在m文件里面第一行输入function [X,Y]=pll(X1,Y1,X2,Y2),这里x1 x2 y1 y2是你函数的输入值, x y是输出值,接着定义你要实现的功 ...

  9. C#:线程

    http://www.cnblogs.com/leslies2/archive/2012/02/07/2310495.html 4.4委托类没看懂 http://www.cnblogs.com/les ...

  10. 常见的appbug(转)

    移动App Bug的影响是用户体验差.App的商店评级下降.用户换用竞争对手的App,声誉和信誉损失.最后销售量减少,如果它是一个付费App的话. 移动App测试与传统台式机测试相比有一定的复杂性.这 ...