最经做一个项目,底层调用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. echarts -01 入门

    1.效果图 2. code <!DOCTYPE html> <html lang="en"> <head> <meta charset=& ...

  2. windows10 环境下theano安装

    前言:我用的是 Anaconda2 安装python 1. 在Anaconda prompt中输入 conda install mingw libpython 2. 添加环境变量 C:\Anacond ...

  3. TCP定时器

    http://network.51cto.com/art/201412/459352.htm TCP 是提供可靠的传输层,它使用的方法之一就是确认从另一端收到的数据.但是数据和确认都可能会丢失.TCP ...

  4. oracle 条件语句的写法

    1.基本的if else DECLARE I ; BEGIN THEN DBMS_OUTPUT.PUT_LINE('TRUE'); ELSE DBMS_OUTPUT.PUT_LINE('FALSE') ...

  5. mvc理念和thinkphp的语法特征 thinkphp引入模板

    mvc即模型(model)-视图(view)-控制器(controller)的缩写 控制器很重要,功能性的东西要靠它实现,模型我还没接触到,只知道它对数据库负责,类似一个大控件吧... 速度... 一 ...

  6. scp与rsync限速

    一/scp限速1M #scp -l 1000 文件名 账号@远程机器IP此时的传输速率就是1M/8=100K左右 二/rsync是(限制为 100k Bytes/s): #rsync -auvzP-- ...

  7. UIlabel多行文字自动换行 (自动折行)

    UIView *footerView = [[UIView alloc]initWithFrame:CGRectMake(, , , )]; UILabel *label = [[UILabel al ...

  8. SQLdiag-配置文件-PerfmonCollector

    前一篇我们已经使用默认配置文件收集了部分诊断数据,并且知道配置文件会影响收集数据的内容.这一篇我们重点讲述配置文件中与性能计数器相关的操作.可使用XML模板控制SQLdiag使用的收集器.每个收集器可 ...

  9. RAC数据库迁移ASM磁盘组到其它存储

    环境介绍: 一共有两个磁盘组:crs和data:crs使用normal冗余:data使用外部冗余. 添加新的asm磁盘过程(略) 1.迁移前 SQL> select group_number, ...

  10. Jquery点击表格单位时选中其中的Radio的三个方法

    HTML: <table> <tr> <td> 1<br> <input type="radio" name="ch ...