OpenCV的.Net包装器(dotNet)?

75

我看到有几个选项可供选择。 opencvdotnetSharperCVEmguCVCode Project 上的这一个

有人使用过其中的任何一个吗?我试用了 Code Project 上的一个,但只要尝试进行任何复杂操作,就会出现一些不好的无法捕获的异常(即 Msgbox 异常)。最好支持跨平台(支持 Mono)。

8个回答

71

我最开始使用opencvdotnet,但它已经不再积极开发了。此外,我需要的功能(人脸检测)支持不够完善。现在我使用 EmguCV:它覆盖了更大的API部分,其背后的开发者非常乐于接受建议和请求。代码看起来很舒服,并且已知可以在Mono上运行。

我在我的博客上写了一个快速入门指南:getting-started guide


8
注意,EmguCV使用双重GPL3/商业许可证,而OpenCV使用BSD许可证。请注意,OpenCVSharp使用LGPL许可证。截至2014年4月,OpenCVSharp正在积极开发中。 - Kaganar
1
如果您计划将项目作为真正可维护的产品发布,请谨慎使用OpenCVSharp。我试用了几周 - 它可以正常工作,但文档和示例很少。我喜欢它的BSD许可证,开发者也很好/活跃,但他需要一个合适的团队。EmguCV的文档、工作示例和社区支持都要优秀得多。 - kdbanman
EmguCV 依赖于旧版本的系统库(包括GTK+ 2)。如果您计划在任何不受支持的系统上使用它,比如Arch Linux,这可能会成为一个问题。 - Dmitry Fedorkov
1
我无法打开入门指南的链接。 - Andy P
你的博客搬家了吗,@friism?http://friism.com/已经无法访问了。 - Fetchez la vache

28

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

截至2023年8月8日:

EmguCV和OpenCvSharp是两个最近有更新的软件包,看起来是未来的更好选择。

需要注意的是,EmguCV使用双重GPL3/商业许可证(source),而OpenCVSharp使用BSD 3-Clause许可证。换句话说,OpenCVSharp可以免费用于商业用途,但EmguCV则不行。然而,EmguCV拥有更好的文档、示例和支持,并且背后有一个更大的开发团队,这使得许可证在许多情况下都是值得的。

值得考虑一下你未来的使用情况。如果你只是想快速开始使用托管语言,那么使用包装器就可以了。我最初也是这样开始的。但是随着我涉足更严肃的应用程序,我发现构建一个Python/C++应用程序具有更好的性能,并且在不同平台上可以更多地重用代码。

3
感谢您在原始帖子发布后五年仍然更新答案。 - Avi Turner
1
是的,如果我们要构建产品,许可证是需要注意的事项。 - Sid133

22
我们使用OpenCVSharp,该网站是日语的,但它使用了最新的OpenCV构建,并在整个实现中使用IDisposable。相比我们迄今看到的其他选项,它似乎提供了更多功能,并且仍然活跃。它也有相当丰富的示例程序。

3
它也可以在 github 上找到。 - Mike
1
它也可以在NuGet上获得,如果您使用的是VS2012或更高版本,则建议使用该位置。 - VoteCoffee

19

需要注意的是,原始问题是在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
我很喜欢你的想法。通过忽略第三方包装器来减少一层维护和复杂性听起来很不错。你能提供修改后源代码的最小示例或链接吗? - kdbanman

2

2

0

SharperCV 是我们在机器人项目中选择的工具,它没有让我们失望。尽管目前标记为废弃,但代码非常棒,只需要进行轻微修改即可根据您的需求进行个性化定制。没有消息框,实际上异常处理也非常明智。

然而,由于互操作层的原因,它不是跨平台的。


0

我知道这个问题已经有很长时间的答案了,但我想补充一下,现在有一个非常好的包装器here。这是你在code project上尝试的openCV包装器的新版本。我已经试用了几天,一切都完美运行。而且,我只用了几分钟就让它工作起来了。

我不知道它与mono的兼容性如何,但在Visual Studio 2010下,它像魔法一样运行,并为我节省了大量的时间和金钱(我的项目是商业项目,大部分库都是开源的,但许可证不允许商业使用,除非发布代码)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接