Mac下编译用于iOS平台的OpenCV及OpenCV_Contrib Framework

项目需要使用OpenCV标准库之外,OpenCV_Contrib提供的算法。因此用OpenCV源代码编译了用于iOS平台的Framework

不需要自行编译Framework,可以直接下载编译好的,然后拉到后面“使用Framework”

一. 编译环境

  • macOS 10.12.5
  • OpenCV 3.2.0
  • OpenCV_Contrib 3.2.0

二. 编译过程

(都是回忆,如果哪天我再次编译,我再补充过程截图)

  1. 下载OpenCV和OpenCV_Contrib源代码
  • 编译方法
    opencv-3.2.0\platforms\ios\readme.txt(或者github)中有编译方法说明,这里直接抄过来

Building OpenCV from Source, using CMake and Command Line
==================================================

cd ~/
python opencv/platforms/ios/build_framework.py ios

If everything's fine, a few minutes later you will get ~//ios/opencv2.framework. You can add this framework to your Xcode projects.

  • 在编译开始前,需要先安装cmake和cmake命令行工具。安装cmake后,打开软件,工具栏->tools->How to Install For Command Line Use中有安装命令行工具的说明:

    Mac下编译用于iOS平台的OpenCV及OpenCV_Contrib Framework_第1张图片

  • 合并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

    Mac下编译用于iOS平台的OpenCV及OpenCV_Contrib Framework_第2张图片

三. 使用Framework

  1. 添加Framework
    opencv2.framework要放在Xcode工程目录下,否则添加framework后会提示找不到头文件
    选择target->Build Phases->Link Binary With Libraries->点击"+"号->Add Other...->选择opencv2.framework->点击Open
    Mac下编译用于iOS平台的OpenCV及OpenCV_Contrib Framework_第3张图片

    Mac下编译用于iOS平台的OpenCV及OpenCV_Contrib Framework_第4张图片

    Mac下编译用于iOS平台的OpenCV及OpenCV_Contrib Framework_第5张图片

    完成后
    Mac下编译用于iOS平台的OpenCV及OpenCV_Contrib Framework_第6张图片
  • 使用OpenCV
    代码部分,和Windows上C++使用OpenCV是一样的,写段代码测试一下工程能否成功build就行。
    下面这段非主流代码,是我随手写的,笑笑就好。
#import 
#import 
using namespace cv;
int Add(int x){
        Mat A = (Mat_(1,2)<<
                 1,1);
        Mat B = (Mat_(2,1)<<
                 x,
                 1);
        Mat C = A*B;
        return (int)C.at(0,0);
    }

四. Tips

  • RTTI。用OpenCV某些算法的时候需要打开RTTI(Xcode是怎么提示的我忘了),打开方法:选择target->Build Settings->搜索框里输入RTTI->Enable C++ Runtime Types选择Yes
    Mac下编译用于iOS平台的OpenCV及OpenCV_Contrib Framework_第7张图片
  • 命名冲突(忘了具体是什么冲突了,好像是keyword还是重定义还是宏定义冲突……)
    打开Prefix.pch文件,在最前面增加
#ifdef __cplusplus
#import 
#import 
#import 
#endif
Mac下编译用于iOS平台的OpenCV及OpenCV_Contrib Framework_第8张图片
  • 类型冲突
    OpenCV的Point和iOS的Point类型名重复了,只能cv::Point

你可能感兴趣的:(Mac下编译用于iOS平台的OpenCV及OpenCV_Contrib Framework)