美文网首页
Mac下编译用于iOS平台的OpenCV及OpenCV_Cont

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

作者: 木音豆子 | 来源:发表于2017-07-11 15:42 被阅读0次

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

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

    一. 编译环境

    • macOS 10.12.5
    • OpenCV 3.2.0
    • OpenCV_Contrib 3.2.0

    二. 编译过程

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

    1. 下载OpenCVOpenCV_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

    1. 添加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

    相关文章

      网友评论

          本文标题:Mac下编译用于iOS平台的OpenCV及OpenCV_Cont

          本文链接:https://www.haomeiwen.com/subject/jruuhxtx.html