2015-10-15 67 views
2

我以前編譯的OpenCV 3.0成功地追蹤this guide,其基本上由以下步驟:如何在OS X上使用額外的模塊來編譯OpenCV?

  • 下載的所有先決條件(的XCode,命令行工具,CMake和OpenCV的源)
  • 建立靜態庫配置CMake的(通過GUI)其中:
    • 取消選中BUILD_SHARED_LIBS
    • 取消選中BUILD_TESTS
    • 添加SDK路徑CMAKE_O SX_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

以上所有的單獨工作正常。


我現在正在尋找與the extra modules編譯OpenCV。根據他們的閱讀材料,它應該像在CMake中填寫OPENCV_EXTRA_MODULES_PATH<opencv_contrib>/modules一樣簡單,然後照常建造。

我按照上面列出的步驟添加了參數,並且構建OpenCV成功,但是,當試圖在程序中使用其中一個額外模塊(即cv::ximgproc::createStructuredEdgeDetection,如果它很重要)時,出現以下錯誤編譯:

Undefined symbols for architecture x86_64:
"cv::ximgproc::createStructuredEdgeDetection(cv::String const&, cv::Ptr<cv::ximgproc::RFFeatureGetter const>)" , referenced from:
_main in main.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

我已經包括了頭,其中應包括以上:

#include <opencv2/ximgproc.hpp> 

我通過了XCode,在那裏我給自己定的/usr/local/include和圖書館額外的頭搜索路徑編譯012的搜索路徑該項目的,我在這裏錯過了什麼?

標準OpenCV功能正常工作。

可能是什麼問題,我將如何去解決它?

+1

您是否將contrib庫添加到了您的依賴項?其餘似乎正確 – Miki

+1

@Miki非常感謝您的評論,我錯過了。我本來有其他連接標誌'-lopencv_calib3d -lopencv_core -lopencv_features2d -lopencv_flann -lopencv_highgui -lopencv_imgcodecs -lopencv_imgproc -lopencv_ml -lopencv_objdetect -lopencv_photo -lopencv_shape -lopencv_stitching -lopencv_superres -lopencv_ts -lopencv_video -lopencv_videoio -lopencv_videostab',但我不包括' -lopencv_ximgproc'。編譯成功後添加後者。有沒有簡單的方法來找出所有提供的包含? – Nit

+1

您應該在您的'/install /'文件夾下找到所有庫。 '/install/x86/vc12/staticlib'在我的版本中 – Miki

回答

4

OpenCV contrib模塊構建正確。

您只需將contrib庫添加到您的依賴項中,在這種情況下,請添加:-lopencv_ximgproc


所有可用的庫都可以在<OPENCV_DIR>/install/文件夾下找到。 例如在我的32位vc12靜態構建文件夾中是<OPENCV_DIR>/install/x86/vc12/staticlib