【问题标题】:Build OpenCV for UWP为 UWP 构建 OpenCV
【发布时间】:2018-05-26 04:39:24
【问题描述】:

我目前正在努力为 UWP 构建 OpenCV。

我已经用谷歌搜索了很多,发现 Microsoft's OpenCV Github Repo 从技术上讲应该可以发挥作用。但是,这个 repo 以及我在这方面发现的几乎所有其他内容都已过时(Visual Studio 2015、旧 OpenCV 版本等)。我需要使用 OpenCV 3.3,因为它是一个跨平台项目,我不想仅仅因为一个过时的 git repo 而重新编译其他所有内容。

任何人都可以从 UWP 的官方存储库中解释使用 CMake 构建 OpenCV 的过程吗?


我的第一次尝试是简单地使用 Windows Dll,但是我的应用程序却对我喊“加载模块失败”。然后,我尝试构建 OpenCV 的 Visual Studio 项目文件,如 herehere 所述。但是,这对我不起作用,因为它会引发以下错误:

cmake/OpenCVUtils.cmake:440 处的 CMake 错误(如果): 如果给定参数:

"(" "OR" "OFF" ")"

指定了未知参数 调用堆栈(最近的调用优先): CMakeLists.txt:317 (OCV_OPTION)

它还告诉我检查 CMakeOutput.log,但到处都是 0 错误。

如果有人能告诉我如何消除此错误或在 CMake GUI 中进行哪些更改以为 UWP 构建 OpenCV,那就太好了!

编辑:

我还尝试使用平台/winrt 中的 WinRT 平台特定工具链编译 OpenCV。虽然它并没有真正改变任何东西(我什至不确定它是否应该),但我仍然得到“无法加载 Dll:找不到指定的模块”。也许 GPPK 的假设是正确的,他认为这更像是一个 UWP 问题而不是 OpenCV 问题。无论如何,如果有人对此有所了解,我真的很想得到一些帮助!

【问题讨论】:

  • 很抱歉我没有在问题中提到这一点,但作者实际上除了使用我也提到过的过时的 microsoft repo 之外什么都没做。
  • 我认为您的 UWP 问题可能比 OpenCV 问题更多。如果它给你一个加载模块失败的错误,你确定你已经在正确的地方添加了 DLL 等吗?
  • 95% 确定。我实际上构建了自己的 C++ Dll,它使用 OpenCV 并导出了我在 Unity 中从 C# 调用的 C 接口。它已经在 Android、Windows x64 和 Windows x86 上运行。我对 UWP 遵循的程序与其他程序完全相同。起初我希望我可以将用于 x86 Windows 的相同 Dll 用于 UWP,但现在我不这么认为了(如果没有必要,微软自己为什么要额外提供一个 git repo?)。关于 Dll 的位置:我创建了一个没有 OpenCV 的演示 Dll,它正在工作,所以我认为一切都应该是正确的。

标签: c++ opencv cmake uwp


【解决方案1】:

好的,我还没有得到答案,所以我自己(或多或少)设法做到了。

我是这样做的:

先决条件

  • Visual Studio (2017)
  • UWP SDK
  • CMake
  • 来自官方 repo 的 OpenCV

步骤

  1. 创建一个您希望内置 UWP 库的构建文件夹。
  2. 在此文件夹中启动 PowerShell 并执行以下命令(将 C:\OpenCV 与本地 OpenCV 路径交换):cmake -G "Visual Studio 15 2017" -DCMAKE_SYSTEM_NAME=WindowsStore -DCMAKE_SYSTEM_VERS ION="10.0" -DCMAKE_VS_EFFECTIVE_PLATFORMS=x86 -DBUILD_TESTS=OFF -DBUILD_PERF_TESTS=OFF C:\OpenCV
  3. 如果您收到与我相同的错误消息(有关详细信息,请参阅问题),请转到 OpenCV 文件夹中的根 CMakeLists.txt 并在第 317 行前面添加一个# (OCV_OPTION(ENABLE_PYLINT))。这应该可以修复它,检查,再次执行上面的命令。
  4. 确保输出声明“Windows RT support YES”和“Building for Microsoft platform: Windows”。
  5. 在构建文件夹中打开 OpenCV.sln。确保所有项目都是“Windows Store”或“Universal Windows”类型,并构建 ALL_BUILD 项目两次:一次在发布配置中,一次在调试中。然后构建 INSTALL 项目。

就是这样,您应该在安装文件夹中找到构建的 Dll。第 3 步可能是 OpenCV 中的一个错误,有望在即将发布的版本中得到修复。

【讨论】:

  • 感谢您的解决方案。由于我正在构建一个也意味着在 ARM 上运行的 UWP 应用程序,我很难理解如何不仅为 x86/x64 编译 OpenCV,知道吗?在这里发布:stackoverflow.com/questions/48035118/…
  • 这非常有帮助,感谢您如此彻底地回答您自己的问题
  • 我只能成功构建 3.3.1 版本。版本 3.4.5 和 4.0.1 不需要编辑根 CMakeLists.txt,但无法构建,因为它们现在到处都使用 Win32 函数。
猜你喜欢
  • 2018-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多