項目需要使用OpenCV標準庫之外劲件,OpenCV_Contrib提供的算法。因此用OpenCV源代碼編譯了用于iOS平臺的Framework
不需要自行編譯Framework棠涮,可以直接下載編譯好的,然后拉到后面“使用Framework”
一. 編譯環(huán)境
- macOS 10.12.5
- OpenCV 3.2.0
- OpenCV_Contrib 3.2.0
二. 編譯過程
(都是回憶,如果哪天我再次編譯妓肢,我再補充過程截圖)
- 下載OpenCV和OpenCV_Contrib源代碼
- 編譯方法
opencv-3.2.0\platforms\ios\readme.txt
(或者github)中有編譯方法說明,這里直接抄過來
Building OpenCV from Source, using CMake and Command Line
==================================================<br >
cd ~/<my_working_directory>
python opencv/platforms/ios/build_framework.py ios<br >
If everything's fine, a few minutes later you will get ~/<my_working_directory>/ios/opencv2.framework. You can add this framework to your Xcode projects.
-
在編譯開始前苫纤,需要先安裝cmake和cmake命令行工具碉钠。安裝cmake后纲缓,打開軟件,
工具欄->tools->How to Install For Command Line Use
中有安裝命令行工具的說明:
-
合并OpenCV和OpenCV_Contrib
(更加優(yōu)美的辦法我不知道喊废,我用了比較偷懶的方法將OpenCV和OpenCV_Contrib編譯到了同一個Framework中)- 復制
opencv_contrib-3.2.0\modules
下需要的模塊(文件夾)至opencv-3.2.0\modules
中
- 復制
-
使用2. 中所述方法開始編譯
成功后祝高,會在opencv-3.2.0\build\ios
中出現(xiàn)opencv2.framework
三. 使用Framework
- 添加Framework
opencv2.framework要放在Xcode工程目錄下,否則添加framework后會提示找不到頭文件
選擇target->Build Phases->Link Binary With Libraries->點擊"+"號->Add Other...->選擇opencv2.framework->點擊Open
完成后
- 使用OpenCV
代碼部分污筷,和Windows上C++使用OpenCV是一樣的工闺,寫段代碼測試一下工程能否成功build就行。
下面這段非主流代碼瓣蛀,是我隨手寫的陆蟆,笑笑就好。
#import <Foundation/Foundation.h>
#import <opencv2/core/core.hpp>
using namespace cv;
int Add(int x){
Mat A = (Mat_<float>(1,2)<<
1,1);
Mat B = (Mat_<float>(2,1)<<
x,
1);
Mat C = A*B;
return (int)C.at<float>(0,0);
}
四. Tips
- RTTI惋增。用OpenCV某些算法的時候需要打開RTTI(Xcode是怎么提示的我忘了)遍搞,打開方法:
選擇target->Build Settings->搜索框里輸入RTTI->Enable C++ Runtime Types選擇Yes
- 命名沖突(忘了具體是什么沖突了,好像是keyword還是重定義還是宏定義沖突……)
打開Prefix.pch文件器腋,在最前面增加
#ifdef __cplusplus
#import <opencv2/opencv.hpp>
#import <opencv2/stitching/detail/blenders.hpp>
#import <opencv2/stitching/detail/exposure_compensate.hpp>
#endif
- 類型沖突
OpenCV的Point和iOS的Point類型名重復了溪猿,只能cv::Point