在c#应用程序中调用opencv c++代码

calling opencv c++ code in C# application

本文关键字:opencv c++ 代码 调用 应用程序      更新时间:2023-10-16

我开发了一个使用OpenCV的c++程序。现在我想用C#开发一个基于windows窗体的应用程序。由于C#只能处理托管代码,所以几乎不可能直接在C#应用程序上运行OpenCV。我已经搜索了使用OpenCV创建C#应用程序的不同方法,其中一种是EmguCV,另一种我更感兴趣的方法是在C#应用程序中导入C++.dll文件,并以这种方式调用非托管函数。

我从用c++创建简单函数开始,通过导入dll,我可以在c#应用程序中使用coutcin。当我试图在我的c++应用程序中包含OpenCV头文件时,问题来了,当我编译时,我得到了这个错误

错误LNK1104:无法打开文件"tbb_debug.lib">

有些人以前也这样做过,但我不知道他是如何将c++与c#接口的在图片框中显示cv::Mat格式的网络摄像头提要

问题是,我有一个函数,它接收一个cv::Mat变量,并对其进行一些图像处理,然后返回处理后的矩阵。我想在我的c#应用程序中使用用c++编写的函数。但问题是,当我在c++中包含OpenCV库时,我无法创建dll。

所以请不要建议我使用EmguCV或任何其他.NET包装用于OpenCV。

我的项目使用Visual Studio 2010。

我会显式导出将入口点封装在C++头中的方法,然后使用p/Invoke来引用它们:

extern "C" __declspec(dllexport) BOOL DoSomething();

然后在C#中消费:

[DllImport("MyOpenCVWrapper.dll")]
private static extern bool DoSomething();

我不会试图引用OpenCV标头。

虽然它可能不是您想要的,但我用C++/CLI完成了该任务,并通过程序集公开了它。它很直接,效果很好。博客文章在这里。