Compile opencv+opencv_contrib lib for Android
序言
使用opencv来进行功能开发的话,可以通过在opencv的官方网上下载对应平台的SDK,地址如下: https://opencv.org/releases.html .
但是,官网提供的sdk里面的功能有限,一些高级的功能模块如:Tracking,Xfeatures2d等,不包含在内,这些功能在opencv_contrib里面,所以,我们要想使用这些功能的话.官方的库就不能满足我们了,我们需要自己根据opencv的源码来编译我们需要的,适合Android平台的库.
环境
Ubuntu 14
步骤
1.新建文件夹用来存储编译所需源码.如:mkdir opencv_build.新建opencv_build文件夹.
2.cd 进入opencv_build文件夹,把opencv和opencv_contrib仓库的代码clone下来,仓库链接如下: https://github.com/opencv/opencv , https://github.com/opencv/opencv_contrib. 然后分别进入这两个仓库,切换到你需要的分支,并把代码更新到最新.这边我是checkout 到了 3.4 分支.(ps:两个库需要切换到相同的分支).
cd opencv/
git checkout 3.4
git pull
3.创建个文件夹用来存储编译好的文件,如:我这边是在opencv里面新建了一个build文件夹用来存储的.
cd opencv/
mkdir build
4.确保你系统上该有的文件:ninja,libcurl4-openssl-dev,android sdk tools 的版本要用25.2.5.(如果已经有的可以跳过此步骤)
ninja安装:
apt-get install ninja-build
libcurl4-openssl-dev 安装:
sudo apt-get install libcurl4-openssl-dev./bootstrap --system-curlmakesudo make install
android sdk tools 25.2.5下载
https://dl.google.com/android/repository/tools_r25.2.5-linux.zip 文件下载下来后放入sdk目录下替换之前的tools文件. SDK Tools error
5.cd /opencv/platform/android 目录,会发现有一个build_sdk.py文件,这是官方提供的使用Python写的一个构建库的脚本.我们运行这个脚本即可.
6.运行的命令: ./build_sdk.py –ndk_path [ndk-path] –sdk_path [sdk-path] –extra_modules_path [opencv_contrib 里的 modules的路径] [存储编译后文件的目录路径] [opencv的路径]
NOTE:
使用py脚本的时候,一些变量的位置一定要指定清楚.之前有遇到ndk breaken的问题.
7.编译好的库文件在o4a文件夹下的install目录下或者与o4a文件夹同级的Opencv-android-sdk.
注意
虽然编译的命令比较简单,但是并不是执行了编译命令就一定会编译成功的,编译的过程会出现一些常见的问题:
ninja 要安装好 否则会遇到找不到的error **CMake Error: CMake was unable to find a build program corresponding to “Ninja”.
注意 我们从编译脚本关联的cmake file 文件中得知.Android NDK 版本要求 r5-r10d ,具体如下:[-r10d -r10c -r10b -r10 -r9d -r9c -r9b -r9 -r8e -r8d -r8c -r8b -r8 -r7c -r7b -r7 -r6b -r6 -r5c -r5b -r5]
且r10以下版本的ndk不支持编译64位的ABIs 如: “arm64-v8a” ,”x86_64”,”mips64”
附
这边有编译好的最新的库,不想自己编译的,直接可以打过来用 https://github.com/MRYangY/opencv-contrib-lib4Android