美文网首页
iOS-OpenCV(一):iOS 上集成 OpenCV 库

iOS-OpenCV(一):iOS 上集成 OpenCV 库

作者: _imp_ | 来源:发表于2018-09-13 15:02 被阅读60次

    一、OpenCV 概述

    • OpenCV(开源计算机视觉库:http://opencv.org)是一个开源的bsd许可库,包含数百种计算机视觉算法。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,可以运行在Linux、Windows、Mac OS、iOS和Android操作系统上。

    二、在 iOS 上集成 OpenCV 库

    集成 OpenCV 到工程有以下三种方式:
    1. 使用Cocopods进行管理依赖 pod ''OpenCV''
    2. 在官网OpenCV-iOS framework直接下载编译好的库
    3. GitHub 拉下源码,编译成framework,导入工程中

    下面提前体验一下OpenCV的强大之处:
    OpenCV官网提供的官方代码

    三、构建opencv + opencv_contrib的framework

    此存储库用于开发所谓的“额外”模块、贡献功能。新模块通常没有稳定的API,并且没有经过良好的测试。因此,它们不应该作为官方OpenCV发行版的一部分发布,因为该库保持了二进制兼容性,并试图提供良好的性能和稳定性。因此,所有新模块都应该单独开发,并首先在opencv_contrib存储库中发布。稍后,当模块成熟并流行起来时,它被转移到中央OpenCV存储库,开发团队为这个模块提供生产质量支持。

    我们将尝试获取和构建OpenCV的所有模块。大致说来,这一进程将包括以下四个步骤:

    1. 获取OpenCV标准模块的源代码。将其存储在任何文件夹中,我们将其称为<opencv_source_path>.
    2. 获取OpenCV的额外模块的源代码。将其存储在任何文件夹中,我们将其称为<opencv_contrib_source_path>.
    3. 尝试构建所有模块并将构建存储在任何文件夹中,我们将其称为<opencv_contrib_build_path>.
    4. 如果任何模块未能构建,通过删除模块或修复其源代码来解决问题。然后,尝试再次构建。

    运行以下命令下载标准模块的源代码:

    $ git clone https://github.com/opencv/opencv.git <opencv_source_path>
    $ git clone https://github.com/opencv/opencv_contrib.git <opencv_contrib_source_path>
    

    OpenCV的源代码附带了针对各种平台的构建脚本。iOS构建脚本使用两个参数——构建路径和opencv_contrib源代码路径。以以下方式运行脚本:

    $ ./<opencv_source_path>/platforms/ios/build_framework.py <opencv_contrib_build_path> --contrib <opencv_contrib_source_path>
    
    • 读取脚本的输出,看看是否构建任何模块失败。请记住,opencv_contrib都包含了来自不同作者的实验模块,有些作者可能就iOS兼容性测试过他们的模块。
    • 如果我们不需要有问题的模块,我们可以简单地在/modules中删除它的源子文件夹,然后重新运行build_framework.py。例如,为了避免构建显著性模块,我们可以删除/modules/saliency。

    当build_framework.py工作正常,它打印:

    ** INSTALL SUCCEEDED **
    

    并创建了框架文件<opencv_contrib_build_path>/opencv2.framework。稍后,我们将把这个框架添加到我们的iOS应用程序项目中;我们将使用以下代码导入它的头文件,如:

    #import <opencv2/xphoto.hpp>
    
    • 使额外的模块在我们的代码中是可选的
      由于额外的模块不如标准模块稳定,我们可能希望在代码中让它们成为可选的。通过将可选代码封装在预处理器条件中,我们可以很容易地禁用或重新启用它以测试效果。考虑下面的例子:
    #ifdef WITH_OPENCV_CONTRIB
    #import <opencv2/xphoto.hpp>
    #endif
    

    如果我们想使用opencv2_contrib,我们就会编辑Xcode项目设置来添加带有_opencv_contrib的预处理器定义。然后,在前面的示例中,是xphoto.hpp头文件将被导入到我们的代码中。创建预处理器定义的详细步骤如下:

    • 在Build Settings选项卡中
    • 找到 Apple LLVM 9.0 - Preprocessing
    • 编辑 Preprocessor Macros | Debug and Preprocessor Macros | Release,添加WITH_OPENCV_ CONTRIB文本。

    设置应该如下面的截图所示:


    image.png

    附:

    将OpenCV和OpenCV_Contrib编译到了同一个Framework中(比较偷懒的方法)

    • 复制opencv_contrib\modules下需要的模块(文件夹)至opencv\modules中
    • 编译

    四、配置工程

    1. Info.plist配置
    首先,让我们配置我们的应用程序在全屏模式下运行,没有状态栏。在导航窗格顶部选择项目文件。现在,选择编辑器区域中的 General 选项卡,这是XCODE窗口的中心部分。找到 Deployment Info 组,并启用 Hide status barRequires full screen 复选框,如下面的屏幕截图所示:

    image.png
    状态栏和全屏设置存储在应用程序的 Info.plist 文件中。打开工程的 Info.plist,在编辑器区域中,注意 UIRequiresFullscreenStatus bar is initially hidden 最初是隐藏的属性,它们都具有“YES”值。但是,我们仍然需要添加另一个属性来确保状态栏不会出现。悬停在列表中的最后一个项目上,然后单击“+”按钮插入新属性。输入 View controller-based status bar appearance 作为属性的键,并将其值设置为“NO”。如下面的截图所示:
    image.png

    2. 添加 frameworks
    除了对 opencv2.framework 的依赖,还依赖于 iOS SDK 的以下标准框架:

    Accelerate.framework
    AssetsLibrary.framework
    AVFoundation.framework
    CoreGraphics.framework
    CoreImage.framework
    CoreMedia.framework
    CoreVideo.framework
    QuartzCore.framework
    UIKit.framework
    Foundation.framework
    Photos.framework
    Social.framework

    将这些框架添加到 Build Phases | Link Binary With Libraries (项目设置部分)。

    3. 指定相机要求
    目前,在支持iOS 9的所有设备中都有摄像头。然而,也许在未来,一些iOS设备将缺少相机。为了覆盖这种可能性并防止App Store将我们的应用程序分发给不兼容的设备,我们应该明确地指定需要摄像头。
    打开 Info.plist,展开 Required device capabilities 项,添加一个新的子项,并输入摄像机值。如图:

    image.png
    对于本工程,我们指定摄像机,因为我们希望使用现场视频作为预览。如果你有一个项目,你只关心捕捉静止图像,你可以指定 still-camera 代替。
    Required Device Capabilities参数配置

    相关文章

      网友评论

          本文标题:iOS-OpenCV(一):iOS 上集成 OpenCV 库

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