工作需要,Android项目里用到了openCV的contrib模块的算法,奈何官方没有提供预编译好的Android SDK,于是参考了网上的一些文章,自己编译,在此做个记录。
编译很简单,下面直接贴出过程:
- 下载OpenCV 3.4.3源码
- 下载OpenCV contrib 3.4.3源码
- 进入到
opencv-3.4.3/build
目录,没有的话自己建立一个
执行cmake 配置一下,注意这里是配置编译armeabi-v7a
,配置arm64-v8a
同理,其中NDK_ROOT
就是你Android NDK的路径而已,在环境变量里指定一下就完事了。
cmake-android -DCMAKE_BUILD_WITH_INSTALL_RPATH=ON \
-DCMAKE_TOOLCHAIN_FILE="/home/xxx/Android/android-ndk-r15c/build/cmake/android.toolchain.cmake" \
-DANDROID_NDK="${NDK_ROOT}" \
-DANDROID_NATIVE_API_LEVEL=${API_LEVEL} \
-DANDROID_ABI="armeabi-v7a with NEON" \
-D WITH_CUDA=OFF \
-D WITH_MATLAB=OFF \
-D BUILD_ANDROID_EXAMPLES=OFF \
-D BUILD_DOCS=OFF \
-D BUILD_PERF_TESTS=OFF \
-D BUILD_TESTS=OFF \
-DOPENCV_EXTRA_MODULES_PATH="/home/kneron/luliang/openCV/opencv_contrib-3.4.3/modules/" \
-DCMAKE_INSTALL_PREFIX="android_opencv" \
..
配置完了执行
make -j8 // 是几核就改成对应的数字
make install // 安装
好了,到这里就编译完事了,很简单吧,主要是cmake配置这一步,其中我给Android SDK下的cmake取了一个别名就叫cmake-android
,实际上是一个软链接而已,其他的配置也就是一些路径的配置而已,很简单。
make install
后需要的头文件和库文件就安装到了android_opencv这个文件夹下。
编译arm64-v8a
的cmake配置如下:
cmake-android -DCMAKE_BUILD_WITH_INSTALL_RPATH=ON \
-DCMAKE_TOOLCHAIN_FILE="/home/xxx/Android/android-ndk-r15c/build/cmake/android.toolchain.cmake" \
-DANDROID_NDK="${NDK_ROOT}" \
-DANDROID_NATIVE_API_LEVEL=${API_LEVEL} \
-DANDROID_ABI="arm64-v8a" \
-D WITH_CUDA=OFF \
-D WITH_MATLAB=OFF \
-D BUILD_ANDROID_EXAMPLES=OFF \
-D BUILD_DOCS=OFF \
-D BUILD_PERF_TESTS=OFF \
-D BUILD_TESTS=OFF \
-DOPENCV_EXTRA_MODULES_PATH="/home/xxx/luliang/openCV/opencv_contrib-3.4.3/modules/" \
-DCMAKE_INSTALL_PREFIX="android_opencv" \
..