如何从 c# web 服务调用 c++ Opencv 项目?

Posted

技术标签:

【中文标题】如何从 c# web 服务调用 c++ Opencv 项目?【英文标题】:How to call c++ Oppencv project from c# web service? 【发布时间】:2012-06-06 15:41:15 【问题描述】:

我已经将图像识别算法实现为 OpenCV c++ 项目,并且我有 C# web 服务。我想从我的 c# web 服务调用我的 c++ Opencv 项目。这就是我的项目应该如何工作。从移动设备将图像发送到 c# web 服务。然后我需要调用 Opencv c++ 项目以进行图像识别。我尝试通过使用 DLL 来做到这一点。如果您认为使用 DLL 是最好的方法,请告诉我如何将我的 Opencv c++ projetc 转换为 DLL 或者是否有其他方法。

非常感谢

【问题讨论】:

【参考方案1】:

我认为您应该使用 PInvoke 来完成您的工作。没用过,但据我所知,这是这样做的:

http://msdn.microsoft.com/en-us/library/aa446536.aspx

【讨论】:

非常感谢您的回答。在 Pinvoke 中它需要使用 dll。但问题是我不知道如何将我的 opencv 项目转换为 dll。我可以将我的整个无需对我的 opencv pproject 进行任何更改即可立即将项目导入 dll。 @JnG 我没有使用 C++ 和打开 CV(只是一些 C# 和 Emgu CV)。我会将此链接发送给使用 open CV 的朋友,也许他可以回答您的问题。【参考方案2】:

您需要创建一个 C++ DLL 项目,您将在其中编写项目的图像识别部分。您可以查看本教程,了解如何使用 Visual Studio 创建 C++ DLL 项目:Walkthrough: Creating and Using a Dynamic Link Library

您应该在该 DLL 文件中创建一个类,并且您将能够使用该类来处理图像。通过使用 PInvoke,您将能够在 C# 项目中使用该类。这是一个关于如何在 C# 项目中使用 DLL 中的 C++ 类的精彩教程:How to Marshal a C++ Class。我在许多项目中使用该文章中的解决方案 A 从 C# 调用 C++ 代码。

为了将现有的 C++ 项目转换为 DLL,您可以更改其输出类型。转到 Project->Properties,在该窗口中,您需要转到 Configuration Properties->General,然后将 Configuration type 更改为 Dynamic Library (.dll),如下图所示:

之后,您需要公开要从 dll 导出的类或函数。我强烈建议您开始一个新的 dll 项目(按照第一个链接)并从那里开始工作,因为 AppWizard 会为您创建一些代码,这样会更容易。

【讨论】:

非常感谢。我试试看。

以上是关于如何从 c# web 服务调用 c++ Opencv 项目?的主要内容,如果未能解决你的问题,请参考以下文章

从 C# .NET Core(特别是 Workday)调用 Java Web 服务。如何在soap请求中获取xml属性

如何从C ++项目调用Web服务? [关闭]

如何从网页Javascript调用C#方法? [关闭]

如何从 C# 调用 C++ 类

如何编写我的 C++ 函数以便我可以从 C# 调用它?

如何使用 C# 从 C++ 应用程序获取调用堆栈?