美文网首页
构建包含额外模块的OpenCV framework

构建包含额外模块的OpenCV framework

作者: unravelW | 来源:发表于2018-07-03 16:51 被阅读0次

    本文翻译自iOS  Application  Development  with  OpenCV 3

            iOS下的OpenCV是按一个framework文件来发布的,它是一个包含库头文件以及用于静态链接的二进制文件的包。二进制文件支持所有iOS设备体系结构(ARMv7,ARMv7和ARM64)以及所有iOS模拟器体系结构(x86和x64)。因此,我们可以为iOS应用程序项目的所有配置使用相同的框架文件。

           OpenCV 3被设计为模块化。它的构建过程是高度可配置的,允许在不破坏其他模块的情况下添加,重新实现或移除模块。每个模块由一个公共头文件以及各种私有头文件和实现文件组成。一些模块被认为是OpenCV构建的标准组件,这些标准模块由库的核心开发团队进行维护和测试。其他模块被视为额外模块,这些额外或“contributed”模块由第三方贡献者维护和测试。这些额外的模块统称为opencv_contrib。

           如果我们只是想使用标准模块,我们可以获得官方的,预构建的iOS版OpenCV发行版。这个预先构建的发行版包含一个框架文件opencv2.framework。如果我们想要使用额外的模块,我们必须为自己构建opencv2.framework。接下来,我们来看看获取或构建框架的步骤。

           接下来讲下如何构建包含额外模块的framework

            我们将尝试获取并构建所有OpenCV模块。从广义上讲,这个过程将包括以下四个步骤:

            1.获取OpenCV标准模块的源代码。将其存储在任何文件夹中,我们将其称为<opencv_source_path>。

            2.获取OpenCV额外模块的源代码。将其存储在任何文件夹中,我们将其称为<opencv_contrib_source_path>。

            3.尝试构建所有模块并将构建存储在任何文件夹中,我们将其称为<opencv_contrib_build_path>。

            4.如果任何模块无法构建,请通过删除模块或修补其源代码来解决此问题。然后,再次尝试构建。

            现在,让我们在完成这些步骤时讨论细节。要获得OpenCV的最新源代码,我们可以使用Git,一个开源版本控制工具。我们已经将Git安装为Xcode Command Line Tools的一部分。OpenCV的标准和额外模块托管在GitHub上的两个存储库中,GitHub是一个在线存储库托管服务。要将标准模块的源代码下载到,请运行以下命令:

    $ git clone https://github.com/Itseez/opencv.git  opencv_source_path

    同样,要将额外模块的源代码下载到<opencv_contrib_source_path>,请运行以下命令:

    $ git clone https://github.com/Itseez/opencv_contrib.git  opencv_contrib_source_path

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

    $ python ./opencv_source_path/platforms/ios/build_framework.py opencv_contrib_build_path --contrib opencv_contrib_source_path

    阅读脚本的输出以查看它是否无法构建某一模块。请记住,opencv_contrib包含来自不同作者的实验模块,有些作者可能不会测试他们的模块是否兼容iOS。

    注意:构建框架前需要先安装cmake,否则会有No such file or directory报错。

    如果我们不需要有问题的模块,我们可以简单地删除 opencv_contrib_source_path/ modules中的源子文件夹,然后重新运行build_framework.py。例如,为了避免构建saliency模块,我们可以删除 opencv_contrib_source_path/ modules / saliency。

    另一方面,如果我们确实需要有问题的模块,首先必须修改其源代码,以便它成功编译并运行iOS。

    在我们的代码中使额外的模块可选

    由于额外的模块不如标准模块稳定,我们可能希望在代码中使它们成为可选项。通过将可选代码封装在预处理器条件中,我们可以轻松地禁用或重新启用它以测试效果。请考虑以下示例:

      #ifdef WITH_OPENCV_CONTRIB

      #import <opencv2/xphoto.hpp>

      #endif

    至此,我们OpenCV framework就构建完成了

    在项目中添加Opencv framework后,需要额外添加Accelerate,CoreGraphics,UIKit框架才能使用

    由于OpenCV的API是C++的,需要进行下面的设置才能使用OpenCV的API

    在编辑器区域中打开Build Settings选项卡,找到Apple LLVM 7.0 - Language组。 将Compile Sources As项的值设置为Objective-C ++

    或者,我们可以将Compile Sources As项保留为其默认值。 然后,我们需要重命名我们的源文件,为它们提供扩展名.mm,使Xcode与Objective-C ++相关联

    相关文章

      网友评论

          本文标题:构建包含额外模块的OpenCV framework

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