环境:
系统:ubuntu16.04
opencv:3.2.0,点击链接下载
opencv_contrib:3.2.0,点击链接下载
android tools:r25.2.5,点击链接下载
android ndk:r15c,点击链接下载
网上找的,不知道那些是必须的。为了避免后面编译错误,全部安装了。
sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff5-dev libdc1394-22-dev
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev liblapacke-dev
sudo apt-get install libxvidcore-dev libx264-dev
sudo apt-get install libatlas-base-dev gfortran
sudo apt-get install ffmpeg
下载一位大神写好的脚本:
git clone https://github.com/tzutalin/build-opencv-for-android.git
下载下来之后,里面包含两个脚本。
其中一个是setup.sh,这个脚本的功能是使用git下载android-ndk,opencv和opencv_contrib。
因为git下载的是最新版本的opencv源码,下载下来之后要切换分支。当然这个脚本会帮你做,它默认下载的是3.1.0版本,所以你需要这样使用stup.sh 3.2.0,给脚本传递一个参数设置版本,当然你也可以直接在脚本里更改默认版本。
但是我不建议使用这个脚本来下载最新版的opencv源码然后切换分支,后续编译会出很多错误,改都不不过来。直接去github上下载opencv3.2.0和opencv_contrib3.2.0的源码,然后解压到build-opencv-for-android文件夹下面,分别重命名为opencv和opencv_contrib。
目录结构是这样的:
android-ndk我也是自行下载的。
下面设置几个环境变量:
export ANDROID_SDK_TOOLS="$ANDROID_SDK_TOOLS:/home/tj/work/software/tools"
export ANDROID_NDK_ROOT="$ANDROID_NDK_ROOT:/home/tj/work/software/android-ndk-r15c"
ANDROID_SDK_TOOLS是android tools:r25.2.5解压的路径,ANDROID_NDK_ROOT是android ndk:r15c的解压路径。
接下来打开build-android-opencv.sh这个脚本,
这里可以更改要编译的目标平台,我把mipsel和mips64el删掉了。
一切就绪,执行build-android-opencv.sh,等待编译完成。
编译完成后会在当前目录下生成一个android_opencv文件夹。
进去找到sdk/native/libs,在打开一个平台的文件夹,
编译成功了。
编译好的sdk可以到这里下载。
使用时,打开/sdk/native/jni/include\opencv2/core/private.hpp
将47-49行和52行注释掉。
/sdk/native/jni/include\opencv2/core/private.cuda.hpp也是同样的处理方式。