如何在OS X上使用额外的模块编译OpenCV?

时间:2015-10-15 20:08:10

标签: c++ xcode macos opencv opencv3.0

我之前在this guide之后成功编译了OpenCV 3.0,它基本上包含以下步骤:

  • 下载所有先决条件(XCode,命令行工具,CMake和OpenCV源)
  • 通过配置CMake(通过gui)构建静态库:
    • 取消选中BUILD_SHARED_LIBS
    • 取消选中BUILD_TESTS
    • 向CMAKE_OSX_SYSROOT添加SDK路径(如果重要,我使用/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

以上所有这一切都很好。

我现在正在寻找使用the extra modules编译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
  ld:找不到架构x86_64的符号
  clang:错误:链接器命令失败,退出代码为1(使用-v查看调用)

我已经包含了应包含以上内容的标题:

#include <opencv2/ximgproc.hpp>

我通过XCode进行编译,我为项目设置了/usr/local/include的额外标题搜索路径和/usr/local/lib的库搜索路径,我在这里遗漏了一些东西?

标准OpenCV功能正常。

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

1 个答案:

答案 0 :(得分:4)

OpenCV contrib模块构建正确。

您只需要将contrib lib添加到依赖项中,在这种情况下添加:-lopencv_ximgproc

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