项目需要使用OpenCV标准库之外,OpenCV_Contrib提供的算法。因此用OpenCV源代码编译了用于iOS平台的Framework
不需要自行编译Framework,可以直接下载编译好的,然后拉到后面“使用Framework”
一. 编译环境
- 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
(更加优美的办法我不知道,我用了比较偷懒的方法将OpenCV和OpenCV_Contrib编译到了同一个Framework中)- 复制
opencv_contrib-3.2.0\modules
下需要的模块(文件夹)至opencv-3.2.0\modules
中
- 复制
-
使用2. 中所述方法开始编译
成功后,会在opencv-3.2.0\build\ios
中出现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