NDK , Ubuntu, Eclipse
opencv2.4.13 的源代码
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 该文件的内容如下图所示:
(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 该文件的内容如下图所示:
(3). arm64-v8a架构 新建名为cmake_android_arm64-v8a.sh的文件: /home/zd/openCV-2.4.13/platforms/scripts/cmake_android_arm64-v8a.sh 该文件的内容如下图所示:
(3). x86架构 新建名为cmake_android_x86.sh的文件: /home/zd/openCV-2.4.13/platforms/scripts/cmake_android_x86.sh该文件的内容如下图所示:
(4). x86_64架构新建名为cmake_android_x86.sh的文件: /home/zd/openCV-2.4.13/platforms/scripts/cmake_android_x86.sh该文件的内容如下图所示:
(5). Linux发行版---Ubuntu新建名为cmake_linux-ubuntu.sh的文件: /home/zd/openCV-2.4.13/platforms/scripts/cmake_linux-ubuntu.sh该文件的内容如下图所示:
以上配置选项含义: (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版本
不同平台下的OpenCV的客制化配置: 如下图所示,红框处的脚本生成了opencv相应平台的工程源码,对应平台的工程源码见绿色框.
精细化配置opencv, 这里以armeabi平台为例 (1). cd build_armeabi (2). ccmake . .代表当前目录 (3). 执行完步骤(2),可见如下界面 该选项BUILD_SHARED_LIBS 默认是OFF,这里配置成了ON, 即编译出来 的是动态库
按键盘上面的字母t,进入高级模式,高级模式会多出很多配置选项, 注意下图中图片的右上角,配置选项有4页,每个选项的含义见下面右图中的红框位置,例如:当前光标在绿色框处,绿色框选项的说明见红色框. 每个选项的含义都需要自己去看
配置完成后按字母c, 会弹出如下界面, 再按下字母e
再按下字母g, 生成并退出
说明:intel架构平台请使能该选项, 可提高opencv的计算速度
不同平台下的OpenCV的编译安装 (1). 编译: make -jN, 10.71服务器N=16, 因为服务器是8核的,每个核启动2 个线程,所以是16 (2). 安装: make install , 生成的include和lib文件,见下图红框处;特别说明 的是, Ubuntu发行版在安装的时候需执行该命令:sudo make install ,否 则没权限创建目录说明:Ubuntu发行版的opencv 生成在该路径下,见右图:
编译出的不同OpenCV平台下的库
编译opencv2.4.13的源码使用的NDK版本是---android-ndk-r16b,下图红框处的include文件夹在android-ndk-r16b中不存在,两个红框处的include文件夹来自android源码自带的ndk下,任何最新的android 源码下面都可以找到这个include文件夹. 下面左图是android-ndk-r16b的目录结构,右图红框里面的目录是该版本中不存在的目录
在intel架构平台请使能该选项“--ffast-math”, 可提高opencv的计算速度,该选项“--ffast-math”默认是没有被配置的