如何在OS X上编译带有额外模块的OpenCV

How to compile OpenCV with extra modules on OS X?

本文关键字:模块 OpenCV 编译 OS      更新时间:2023-10-16

我以前已经按照本指南成功编译了OpenCV 3.0,它基本上由以下步骤组成:

  • 下载所有先决条件(XCode,命令行工具,CMake和OpenCV源代码)
  • 通过配置CMake(通过gui)来构建静态库:
    • 取消选中BUILD_SHARED_LIBS
    • 取消选中BUILD_TESTS
    • 添加一个SDK路径到CMAKE_OSX_SYSROOT(如果它重要,我使用/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk)。
    • 将x86_64添加到CMAKE_OSX_ARCHITECTURES(强调我的,这似乎是问题,我确信我已经遵循了这一步)
    • 取消勾选WITH_1394
    • 取消WITH_FFMPEG
  • 通过CMake配置和生成,然后在CLI中配置makesudo make install

以上所有单独工作很好。


我现在正在寻找与额外的模块编译OpenCV。根据他们的阅读,它应该像在CMake中填写OPENCV_EXTRA_MODULES_PATH<opencv_contrib>/modules一样简单,然后像往常一样构建。

我按照上面列出的步骤添加参数和构建OpenCV成功,但是,当尝试在程序中使用一个额外的模块(即cv::ximgproc::createStructuredEdgeDetection,如果它重要的话)时,我在编译时得到以下错误:

架构x86_64:
未定义符号"cv::ximgproc::createStructuredEdgeDetection(cv::String const&, cv::Ptr<cv::ximgproc::RFFeatureGetter const>)",引用自:
_main in main.o
架构x86_64没有找到Ld: symbol(s)
Clang:错误:链接器命令失败,退出代码为1(使用-v查看调用)

我已经包含了头,它应该包含上面的内容:

#include <opencv2/ximgproc.hpp>

我正在通过XCode编译,在那里我已经设置了/usr/local/include的额外头搜索路径和/usr/local/lib的库搜索路径为项目,我在这里错过了什么?

标准OpenCV功能运行良好。

问题可能是什么,我该如何去解决它?

OpenCV贡献模块构建正确。

您只需要将贡献库添加到您的依赖项中,在本例中添加:-lopencv_ximgproc


所有可用的库都可以在<OPENCV_DIR>/install/文件夹下找到。例如,在我的32位vc12静态构建是在<OPENCV_DIR>/install/x86/vc12/staticlib文件夹。