为 Windows 10 IoT Core ARM (Raspberry Pi) 编译 OpenCV 3

Compile OpenCV 3 for Windows 10 IoT Core ARM (Raspberry Pi)

使用 Windows OS 上托管的 Visual Studio 为 Windows 10 IoT Core ARM (Raspberry Pi) 编译 OpenCV 3.* 的最简单方法是什么?

我可以在其他贡献模块中使用 DNN(深度神经网络)模块吗?

我在 Raspberry Pi 3 上尝试为 Windows 10 IoT Core (10.0.16299.0) 运行 编译 OpenCV 3.4.1 时遇到了一些困难,所以我决定分享我的经验与社区。

要求

您需要继续的是:

  • OpenCV 来源(来自 Github)。 opencv 用于核心功能,opencv_contrib 用于附加模块。
  • CMake-gui (here)
  • Visual Studio 使用 ARM 工具集和 Windows 10 SDK。

我用的是最近的 Visual Studio 2017 (15.6.2)。社区版就够了。确保您需要 Visual Studio 个组件:

  • Windows 10 个适用于 UWP 的 SDK (10.0.16299.0):C++
  • UWP 的 Visual C++ 运行时
  • 用于 ARM 的 Visual C++ 编译器和库

SDK 版本显然应与目标 OS 平台版本匹配。截至今天,它是 10.0.16299.0.

配置

开始CMake-gui。 Select 您的 OpenCV 源代码(根路径)在哪里以及您希望将构建(配置、临时和输出)存储在哪里。单击配置

弹出windowselectVisual Studio15 2017 ARM作为生成器(工具集和架构版本)和select "为cross-compiling指定选项"

提供:

  • 操作系统:Windows商店
  • 版本:10.0
  • 处理器:ARM

成功生成(可能有一些警告)应以“配置完成”消息结束并显示制作选项。

寻找 OPENCV_EXTRA_MODULES_PATH 选项并提供 opencv_contrib/modules 文件夹的路径。

再次单击配置

现在您可以 select 您希望包含在构建中的模块。 在我的配置中我有:

  • 启用构建 opencv-world 单个库 (BUILD_opencv_world)
  • 禁用构建测试和应用程序(BUILD_TESTSBUILD_PERF_TESTSBUILD_opencv_apps
  • 可选)启用 Raspberry Pi NEON 和 VFP3 优化(ENABLE_VPF3=ONENABLE_NEON=ON)。您可以在 Cmake 中使用 'add entry' 添加它们(作为布尔值),但目前有一些 OpenCV make 处理这些选项时出现问题。

我不得不 禁用 描述符 (BUILD_opencv_line_descriptor) 和显着性模块 (BUILD_opencv_saliency),因为它们在 Microsoft 特定 __popcnt 中存在问题, MS 编译器在 ARM 平台上不可用。

并且我使用了一个技巧来为 Windows 启用 DNN 模块。在 /modules/dnn/CMakeList.txt 中,您必须注释前三行:

#if(WINRT)
#  ocv_module_disable(dnn)
#endif()

再次配置并点击生成。在 Visual Studio.

中打开项目 (.SLN)

默认项目是 ALL_BUILD 这是要构建的项目。 Select 您要构建的配置(发布或调试)。请注意,生成的导入库 (.lib) 和 dll (.dll) 将针对不同的配置具有不同的名称。

就是这样!这些库可能 link 针对 UWP 应用程序 (C++/CX) 和 ARM 平台的库。

此外 - 您可以使用相同的过程为 x64x86 平台构建您自己的配置:重新开始 Cmake-gui 再次,select 不同的构建文件夹,在配置的第一步选择 Visual Studio 15 2017 x64x86 作为你的生成器,然后在 cross-compiling 选项中进行相应的处理。其余的配置过程看起来是一样的。

要在 Windows 10 IoT Core 上进一步使用 OpenCV,您可以查看 Microsoft 本身提供的示例,例如here.