lib 文件夹(或其替代品)在当前 OpenCV 中的什么位置?

Where is the lib folder (or its replacement) in the current OpenCV?

提问人:Hack-R 提问时间:3/1/2016 最后编辑:Nikita ChopraHack-R 更新时间:7/3/2019 访问量:5171

问:

我正在关注一本为旧版本的 OpenCV(OpenCV 2 Computer Vision,由 PACT 编写)编写的书,它告诉我在创建新属性表时将 lib 文件夹包含在我的 Visual Studio 2013 属性管理器中。

我在当前的 GitHub 版本(opencv-master,即 OpenCV 3.1.x)中没有看到名为 lib 的目录。此文件夹是否已替换为其他文件夹?

我用 cmake 构建了 OpenCV。我发现了一个 4 年前未回答的问题,其中有人也在寻找这个文件夹。他们尝试从另一个不再存在的目录构建库,但这无论如何都对他们不起作用......opencv-master

另一位 OpenCV 用户刚刚告诉我,GitHub 不包含这些库,所以你必须在本地创建它们。我仍然不清楚我在哪里/如何制作它们。

我意识到预构建的二进制文件有这个,但我避免使用它们,因为我需要 opencv_contrib 中的 SURF 函数,所以我需要从源代码构建它。

C++ Windows Visual-Studio OpenCV 构建

答:

4赞 Nikita Chopra 3/1/2016 #1

预构建的二进制文件将在相应的路径中有一个库文件夹

   Local System Path(Opencv Folder)-> build->x64/x86->vc10/vc11/vc12->lib.

正如您提到的,您不想使用它,那么留给您的唯一选择就是在本地构建它,如果您打算将 Opencv 库用于各种功能和项目,这是一个更好的选择,因为它解决了许多构建错误你以后可能遇到的。

我使用 Cmake 图形用户界面来构建 opencv,以下是我在我的系统上成功构建库的步骤。

  1. 因此,您需要创建一个新文件夹,其中包含所有 生成的 Makefile。
  2. 请参考这张图片,以便更清楚地了解:enter image description here
  3. 在 GUI 中,您可以定义 OpenCVConfig.cmake 所在的源目录路径,根据您的图像,它是 映像 opencv-master 中的当前文件夹。
  4. 同样,定义您创建的新目录的路径,该目录将存储所有生成文件。
  5. 请确保取消选中 Build_Examples以避免配置错误。
  6. 然后在配置完成后单击底部的配置。(您可能需要配置两次)
  7. 单击“配置”旁边的选项卡“生成”以创建解决方案文件后。它会要求您提供编译器名称 选择 编译器从选项列表中安装在您的系统上。后 生成完成。
  8. 转到此路径Build_New_Directory(您创建的目录)您将找到 OpenCV.sln构建此项目,大约需要 10-15 分钟,具体取决于您的处理器,请耐心等待。如果此时出现生成错误,请不要将时间花在Visual Studio上的调试上,请返回Cmake GUi并再次配置它,这次提供系统上找不到的依赖库的路径。重复该过程,现在应该成功构建。
  9. 成功构建后,您现在可以在系统上找到所有 opencv 库构建的路径,如下所示。 Build_New_Directory(您创建的目录)-> install->x64->vc10(我使用的编译器)->lib。
0赞 Oliver Zendel 7/3/2019 #2

作为 Nikita 遮阳篷的更新: 存在一个 cmake 构建错误,如果未设置 x64 文件夹OpenCV_RUNTIME则不会创建该文件夹。如果使用比当时可用的版本(例如 Visual Studio 2017)更新的 Visual Studio 版本构建旧的 OpenCV(例如 <= 3.2.0),则会发生这种情况

要解决此问题,请在 ./cmake/OpenCVDetectCXXCompiler.cmake 和 ./cmake/templates/OpenCVConfig.root-WIN32.cmake.in(或 < v3.2.0 中的 ./cmake/OpenCVConfig.cmake)文件中添加MSVC_VERSION正确的 elseif-cases:

[...]
elseif(MSVC_VERSION EQUAL 1900)
 set(OpenCV_RUNTIME vc14)
# old version ends here with endif()
elseif(MSVC_VERSION GREATER 1909 AND MSVC_VERSION LESS 1920)
  set(OpenCV_RUNTIME vc15)
elseif(MSVC_VERSION GREATER 1919 AND MSVC_VERSION LESS 1930)
  set(OpenCV_RUNTIME vc16)
endif()
[...]