我看到有几个选项可供选择。 opencvdotnet、SharperCV、EmguCV、Code Project 上的这一个。
有人使用过其中的任何一个吗?我试用了 Code Project 上的一个,但只要尝试进行任何复杂操作,就会出现一些不好的无法捕获的异常(即 Msgbox 异常)。最好支持跨平台(支持 Mono)。
我看到有几个选项可供选择。 opencvdotnet、SharperCV、EmguCV、Code Project 上的这一个。
有人使用过其中的任何一个吗?我试用了 Code Project 上的一个,但只要尝试进行任何复杂操作,就会出现一些不好的无法捕获的异常(即 Msgbox 异常)。最好支持跨平台(支持 Mono)。
我最开始使用opencvdotnet,但它已经不再积极开发了。此外,我需要的功能(人脸检测)支持不够完善。现在我使用 EmguCV:它覆盖了更大的API部分,其背后的开发者非常乐于接受建议和请求。代码看起来很舒服,并且已知可以在Mono上运行。
我在我的博客上写了一个快速入门指南:getting-started guide。
NuGetMustHaves对NuGet上的软件包进行了很好的总结,包括它们的构建日期和OpenCV版本。
截至2023年8月8日:
EmguCV和OpenCvSharp是两个最近有更新的软件包,看起来是未来的更好选择。
需要注意的是,EmguCV使用双重GPL3/商业许可证(source),而OpenCVSharp使用BSD 3-Clause许可证。换句话说,OpenCVSharp可以免费用于商业用途,但EmguCV则不行。然而,EmguCV拥有更好的文档、示例和支持,并且背后有一个更大的开发团队,这使得许可证在许多情况下都是值得的。
值得考虑一下你未来的使用情况。如果你只是想快速开始使用托管语言,那么使用包装器就可以了。我最初也是这样开始的。但是随着我涉足更严肃的应用程序,我发现构建一个Python/C++应用程序具有更好的性能,并且在不同平台上可以更多地重用代码。需要注意的是,原始问题是在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”示例。
SharperCV 是我们在机器人项目中选择的工具,它没有让我们失望。尽管目前标记为废弃,但代码非常棒,只需要进行轻微修改即可根据您的需求进行个性化定制。没有消息框,实际上异常处理也非常明智。
然而,由于互操作层的原因,它不是跨平台的。
我知道这个问题已经有很长时间的答案了,但我想补充一下,现在有一个非常好的包装器here。这是你在code project上尝试的openCV包装器的新版本。我已经试用了几天,一切都完美运行。而且,我只用了几分钟就让它工作起来了。
我不知道它与mono的兼容性如何,但在Visual Studio 2010下,它像魔法一样运行,并为我节省了大量的时间和金钱(我的项目是商业项目,大部分库都是开源的,但许可证不允许商业使用,除非发布代码)