6

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

我首先在 C++ 中创建简单的函数,然后通过导入 dll 在我的 C# 应用程序中cout使用cin。当我尝试在我的 c++ 应用程序中包含 OpenCV 头文件并且当我编译时出现此错误时,问题就出现了

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

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

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

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

我正在为我的项目使用 Visual Studio 2010。

4

2 回答 2

3

我会明确导出将入口点包装在 C++ 标头中的方法,然后使用 P/Invoke 来引用它们:

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

然后在 C# 中使用它们:

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

我不会尝试引用 OpenCV 标头。

于 2012-11-21T12:33:12.077 回答
1

尽管它可能不是您想要的,但我使用 C++/CLI 完成了该任务,并通过程序集公开了它。这很简单,而且效果很好。 博客文章在这里

于 2012-11-21T13:12:40.553 回答