【问题标题】:.Net (dotNet) wrappers for OpenCV? [closed]OpenCV的.Net(dotNet)包装器? [关闭]
【发布时间】:2026-01-31 05:50:01
【问题描述】:

我看到有几个。 opencvdotnetSharperCVEmguCVOne on Code Project

有人对这些有任何经验吗?我在 Code Project 上玩了一会儿,但是当我尝试做任何复杂的事情时,我得到了一些令人讨厌的无法捕获的异常(即 Msgbox 异常)。最好是跨平台(支持 Mono)。

【问题讨论】:

    标签: c# .net opencv mono cross-platform


    【解决方案1】:

    我从 opencvdotnet 开始,但它并没有真正积极开发。此外,对我需要的功能(面部检测)的支持不完整。我现在正在使用EmguCV:它封装了 API 的大部分,并且它背后的人对建议和请求非常敏感。该代码令人赏心悦目,并且可以在 Mono 上运行。

    我在我的博客上写了一个快速的getting-started guide

    【讨论】:

    • 注意,EmguCV 使用双重 GPL3/商业许可证,而 OpenCV 使用 BSD 许可证。请注意,OpenCVSharp 使用 LGPL 许可证。自 2014 年 4 月起,OpenCVSharp 正在积极开发中。
    • 如果您计划将您的项目作为一个真正的、可维护的产品发布,那么请警惕 OpenCVSharp。我玩了几个星期 - 它工作正常,但文档和示例很少。我喜欢它的 BSD 许可证,并且开发人员很好/很活跃,但他需要一个合适的团队。 EmguCV 的 documentationworking examplescommunity support 非常出色。
    • EmguCV 依赖于旧版本的系统库(包括 GTK+ 2)。如果您打算在任何不受支持的系统上使用它可能会出现问题,例如Arch Linux。
    • 我的入门指南链接超时
    • 你的博客搬迁了吗,@friism? friism.com 死了。
    【解决方案2】:

    我们使用OpenCVSharp 谷歌代码网站是日文的,但它使用最新的 OpenCV 构建并始终暗示 IDisposable。它似乎比我们迄今为止看到的任何其他产品都提供了更多的功能,并且仍然很活跃。它也有相当广泛的示例程序。

    【讨论】:

    • 也可以在github获得
    • 它也可以在 NuGet 上使用,如果您使用的是 VS2012 或更高版本,推荐使用它
    【解决方案3】:

    我认为需要注意的是,最初的问题是在 2008 提出的,而 OpenCV 2.0 是在 2009 发布的。 2.0 版本引入了一个 C++ 包装器,它比 OP 所面临的旧 C 接口更容易使用。对于我的 .NET 项目,我将所有图形操作留在原生 C++ 中。

    试试这个:创建一个链接到 OpenCV 库的 C++/CLR DLL 项目。 OpenCV 手册描述了如何为 Windows C++ EXE 执行此操作,相同的步骤也适用于 C++/CLR DLL。然后当然是 DLL 导出可从 .NET EXE 调用的方法。

    要对其进行测试,您应该能够通过稍微调整将任何 OpenCV 样本合并到您的 DLL 中。 (将 .CPP 文件添加到您的项目中,将 main() 函数转换为类成员,等等 - 您知道演习...)一个好的测试候选可能是“mat_mask_operations”示例。

    【讨论】:

    • 我真的很喜欢你的想法。通过忽略第三方包装器来消除一层维护和复杂性听起来很棒。您能否链接/提供修改后的源代码的最小示例?
    【解决方案4】:

    NuGetMustHaves 对 NuGet 上的软件包及其构建日期和 OpenCV 版本进行了很好的总结。

    截至 2021 年 3 月 25 日:

    • EmguCV 于 2021 年 1 月 19 日针对 OpenCV vv 4.5.1.4349 更新
    • OpenCvSharp 于 2021 年 1 月 24 日针对 OpenCV v4.5.1.20210123 更新

    EmguCV 和 OpenCvSharp 是最近构建的 2 个软件包,似乎是未来更好的选择。

    请注意,EmguCV 使用双重 GPL3/商业许可证(source),而 OpenCVSharp 使用 BSD 3-Clause 许可证。换句话说,OpenCVSharp 可以免费用于商业用途,但 EmguCV 不是。不过,EmguCV 拥有出色的文档/示例/支持和更大的开发团队,这使得许可证在许多情况下都值得。

    值得考虑您未来的用例是什么。如果您只是想使用托管语言快速运行,那么包装器很好。我就是这样开始的。但随着我进入更严肃的应用程序,我发现构建 python/C++ 应用程序具有更好的性能和跨平台重用代码的更多潜力。

    【讨论】:

    • 感谢您在原始帖子后 5 年内保持答案更新。
    • 是的。如果我们要构建产品,需要注意许可证。
    【解决方案5】:

    我认为最好的包装是 opencvsharp http://code.google.com/p/opencvsharp/

    【讨论】:

      【解决方案6】:

      我创建了一个 NuGet 包,以便使用 EmguCV 在 C# 中轻松开始使用 OpenCv。

      看看吧! 在 Visual Studio 中搜索并添加 myEmguCV.Net NuGet 包。

      https://www.nuget.org/packages/myEmguCV.Net

      【讨论】:

        【解决方案7】:

        SharperCV 是我们选择的工具,它并没有让我们失望,因为我们的robotics project。尽管它目前被标记为废弃,但代码的状态非常好,只需稍作调整即可根据您的需要对其进行自定义。没有 msgboxes,实际上非常理智的异常处理。

        不过,由于互操作层,它不是跨平台的。

        【讨论】:

          【解决方案8】:

          我知道这个问题已经回答了很长时间,但我想补充一点,有一个非常好的包装器here。这是您在 code project 上尝试过的新版本的 openCV 包装器。我已经尝试了几天,一切都很完美。另外,我在几分钟内就能搞定。

          我不知道与 mono 的兼容性,但在 Visual Studio 2010 下,它就像一个魅力,节省了我大量的时间和金钱(我的项目是商业项目,并且大多数库都是开源的,并且没有许可证'除非发布代码,否则不允许商业使用)

          【讨论】: