Friday, October 21, 2011

Porting OpenCV 2.3.1 to iPhone 3GS/4/4S - 如何使用cmake+Xcode編譯OpenCV 2.3.1函式庫給iOS使用

要能在Xcode中使用OpenCV 2.3.1函式庫來實作自己的程式首要之務當然是要能建立出符合iOS使用的OpenCV 2.3.1的函式庫,如下的步驟紀錄了這個過程:
1. 下載並安裝CMakeMac OSX 64/32-bit Universal
2. 下載並解壓縮OpenCV-2.3.1a.tar.bz2
3. 執行CMake並指定Where is the source code(你的OpenCV資料夾位置)、Where to build the binaries(編譯後OpenCV函式庫要放的資料夾)以及CMAKE_INSTALL_PREFIX(安裝編譯的檔案夾),如下圖:
4. 在CMake裡面取消下列的選項:

  • BUILD_DOCS
  • BUILD_EXAMPLES
  • BUILD_NEW_PYTHON_SUPPORT,
  • BUILD_SHARED_LIBS
  • BUILD_TESTS
  • BUILD_WITH_DEBUG_INFO
  • ENABLE_SSE, WITH_EIGEN
  • WITH_OPENEXR
  • WITH_PVAPI
  • WITH_QT
  • WITH_QT_OPENGL
  • WITH_QUICKTIME

5. CMake裡面Configure選擇Xcode然後按下Generate,執行完後在你設定輸出函式庫的資料夾裡就會產生OpenCV.xcodeproj 。

6. 用Xcode打開OpenCV.xcodeproj,將Base SDK選成iOS(我用的是iOS5.0),如圖:

7. Xcode中OpenCV Build Settings的Architectures選Standard (armv7),如圖:

8. Xcode中OpenCV Build Settings的Compiler for C/C++/Objective-C選LLVM GCC4.2,如圖:

8. Xcode中OpenCV TARGETS將opencv_highgui、 opencv_traincascade、 opencv_createsamples、 opencv_haartraining、 opencv_performance、 opencv_stitching,如圖:

9. 接著就是選擇TARGETS中的ALL_BUILD來編譯;如果沒有意外,成功編譯後在你設定編譯後OpenCV函式庫要放的資料夾中的lib資料夾下就會有所有opencv的函式庫了;最後,你還可以選擇TARGETS中的install來編譯,成功的話,在你設定安裝編譯的檔案夾中就會產生集成後的標頭檔方便你使用。

8 comments:

  1. This comment has been removed by the author.

    ReplyDelete
  2. 您好:
    由於我目前正在學習怎麼在 iOS 上使用 OpenCV,照著您所寫的步驟使用 CMake + OpenCV 來編譯,但在某個地方卡住了…
    產生好 OpenCV 專案檔後,在刪除opencv_highgui、 opencv_traincascade、 opencv_createsamples、 opencv_haartraining、 opencv_performance、 opencv_stitching等targets時都會導致 XCode 無預警當掉,
    想請教您是否曾遇過此問題,因為我一直找不到當掉的原因…

    我使用的環境是 Mac OS X 10.7 + XCode 4.3

    ReplyDelete
    Replies
    1. 好久上看有沒有留言,剛剛才看到你的留言,如果你還需要幫助,再留言跟我說一下。

      Delete
  3. 您好
    我跟樓上的也是一樣的狀況
    刪除完上述的targets時, XCode 無預警當掉
    懇請協助

    kcman

    ReplyDelete
    Replies
    1. 不刪的話那些哪也會造成compile error

      Delete
    2. 你要不要試試用這個看看
      http://opencv.willowgarage.com/wiki/UsingOpenCVUnderOSX

      Delete
  4. 请问,如果我要直接集成opencv到我的static library如何做?谢谢~

    ReplyDelete