opencv编译方法
1、 准备环境
(1). Opencv源码版本: 2.4.13
(2). Opencv源码路径: /home/zd/openCV-2.4.13/
(3). 编译平台: Ubuntu
(4). NDK: /opt/android-ndk-r16b
(5). 设置ANDROID_NDK的环境变量
在~/.bashrc中设置ANDROID_NDK的值:export ANDROID_NDK=/op t/android-ndk-r16b
执行source .bashrc 使刚才的设置生效
(6). 安装cmake以及依赖库(Ubuntu平台已安装)
sudo apt-get install cmake
sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev
libavformat-dev libjpeg.dev libtiff4.dev
libswscale-dev libjasper-dev
2、 OpenCV配置移动平台(目前针对的是android平台, 如有需要可以编译ios平台)选项说明(重要)
下面3副图中的内容见opencv源码:
openCV-2.4.13/platforms/android/android.toolchain.cmake



3、 不同平台下的OpenCV配置
(1). armeabi架构
新建名为cmake_a ndroid_armeabi.sh的文件: /home/zd/openCV-2.4.1 3/platforms/scripts/cmake_a ndroid_armeabi.sh
该文件的内容如下图所示:

4、 (2). armeabi-v7a with NEON架构
新建名为cmake_android_armeabi-v7a-NEON.sh的文件: /home/zd/ope nCV-2.4.13/platforms/scripts/cmake_android_armeabi-v7a-NEON.sh
该文件的内容如下图所示:

5、(3). arm64-v8a架构
新建名为cmake_android_arm64-v8a.sh的文件: /home/zd/openCV-2.4.13/platforms/scripts/cmake_android_arm64-v8a.sh
该文件的内容如下图所示:

6、(3). x86架构
新建名为cmake_android_x86.sh的文件: /home/zd/openCV-2.4.13/platforms/scripts/cmake_android_x86.sh
该文件的内容如下图所示:

7、(4). x86_64架构
新建名为cmake_android_x86.sh的文件: /home/zd/openCV-2.4.13/platforms/scripts/cmake_android_x86.sh
该文件的内容如下图所示:

8、(5). Linux发行版---Ubuntu
新建名为cmake_linux-ubuntu.sh的文件: /home/zd/openCV-2.4.13/platforms/scripts/cmake_linux-ubuntu.sh
该文件的内容如下图所示:

1、以上配置选项含义:
(1). ANDROID_ABI --- 指cpu的架构,主流的架构包含armeabi, armeabi-v7 a, armeabi-v7a with NEON, arm64-v8a, x86, x86_64,手机中很少见到使 用x86和x86_64平台,但是在MID设备中很常见。
(2). ANDROID_TOOLCHAIN_NAME --- 工具链的名字,对应的是android-n dk-r16b中图2的名字
(3). ANDROID_FORCE_ARM_BUILD --- 使用32位的arm指令集来代替Tumb 指令
(4). ANDROID_STL --- runtime时使用的库,默认是gnustl_static, 也可以改 为gnustl_shared
(5). ANDROID_STL_FORCE_FEATURES --- 使c++支持 rtti和exception
(6). CMAKE_TOOLCHAIN_FILE --- cmake工具链的路径, 这里指定的是相对 路径, 不同的opencv版本该路径可能不同
(7). ANDROID_NATIVE_API_LEVEL --- android api的级别
(8). CMAKE_SYSTEM_VERSION--- 为不同版本的主机操作系统启用的构建目 标
(9). CMAKE_BUILD_TYPE ---- 编译出的文件是Release版本还是Debug版本
2、不同平台下的OpenCV的客制化配置:
如下图所示,红框处的脚本生成了opencv相应平台的工程源码,对应平台的工程源码见绿色框.

3、精细化配置opencv, 这里以armeabi平台为例
(1). cd build_armeabi
(2). ccmake . .代表当前目录
(3). 执行完步骤(2),可见如下界面
该选项BUILD_SHARED_LIBS 默认是OFF,这里配置成了ON, 即编译出来 的是动态库

4、按键盘上面的字母t,进入高级模式,高级模式会多出很多配置选项, 注意下图中图片的右上角,配置选项有4页,每个选项的含义见下面右图中的红框位置,例如:当前光标在绿色框处,绿色框选项的说明见红色框. 每个选项的含义都需要自己去看


5、配置完成后按字母c, 会弹出如下界面, 再按下字母e

6、再按下字母g, 生成并退出

7、说明:intel架构平台请使能该选项, 可提高opencv的计算速度

1、不同平台下的OpenCV的编译安装
(1). 编译: make -jN, 10.71服务器N=16, 因为服务器是8核的,每个核启动2 个线程,所以是16
(2). 安装: make install , 生成的include和lib文件,见下图红框处;特别说明 的是, Ubuntu发行版在安装的时候需执行该命令:sudo make install ,否 则没权限创建目录
说明:Ubuntu发行版的opencv 生成在该路径下,见右图:


2、编译出的不同OpenCV平台下的库

1、 编译opencv2.4.13的源码使用的NDK版本是---android-ndk-r16b,下图红框处的include文件夹在android-ndk-r16b中不存在,两个红框处的include文件夹来自android源码自带的ndk下,任何最新的android 源码下面都可以找到这个include文件夹.
下面左图是android-ndk-r16b的目录结构,右图红框里面的目录是该版本中不存在的目录

