编译OpenCV Android库(自定义配置)

根据自己需要的模块交叉编译 Android OpenCV 库,如下面的脚本只编译了 opencv_core 、opencv_imgproc、opencv_video 三个模块,如果需要裁剪自定制,可以修改 build_opencv_modules 函数,打开或关闭你需要的模块。模块所需要依赖的其他模块可在 OptionArgs.txt 里查找 xxx_LIB_DEPENDS,xxx 为要编译的模块。比如,要编译 opencv_video,可以在 OptionArgs.txt 里搜索 opencv_video_LIB_DEPENDS 可以看到其依赖于 opencv_core 和 opencv_imgproc 模块:

//Dependencies for the target
opencv_video_LIB_DEPENDS:STATIC=general;opencv_core;general;opencv_imgproc;general;dl;general;m;general;log;

下面脚本已放在 github

交叉编译脚本如下(使用时记得将 NDK 改成自己的路径):

#!/bin/bash

# Author: AlanWang
# Email: [email protected]
# Date: 2020-06-10


NDK_PATH="/Users/AlanWang/AndroidDev/android-ndk-r16b"
CMAKE_TOOLCHAIN_PATH="${NDK_PATH}/build/cmake/android.toolchain.cmake"

echo "build opencv for android"

function build_opencv_modules
{
    ARCH_ABI=$1
    API_LEVEL=$2

    cmake \
    -DCMAKE_TOOLCHAIN_FILE=$CMAKE_TOOLCHAIN_PATH \
    -DCMAKE_BUILD_TYPE=Release \
    -DANDROID_NDK=$NDK_PATH  \
    -DCMAKE_CXX_FLAGS=-std=c++11 \
    -DANDROID_ABI=$ARCH_ABI \
    -DANDROID_STL=c++_static \
    -DENABLE_CXX11=ON \
    -DBUILD_ANDROID_PROJECTS=OFF \
    -DBUILD_ANDROID_EXAMPLES=OFF \
    -DBUILD_JAVA=OFF  \
    -DBUILD_CUDA_STUBS=OFF \
    -DBUILD_DOCS=OFF \
    -DBUILD_EXAMPLES=OFF \
    -DBUILD_JASPER=OFF \
    -DBUILD_JPEG=OFF \
    -DBUILD_OPENEXR=OFF \
    -DBUILD_PACKAGE=OFF \
    -DBUILD_PERF_TESTS=OFF \
    -DBUILD_PNG=OFF \
    -DBUILD_SHARED_LIBS=OFF \
    -DBUILD_TBB=OFF  \
    -DBUILD_TESTS=OFF \
    -DBUILD_TIFF=OFF  \
    -DBUILD_WITH_DEBUG_INFO=OFF  \
    -DBUILD_WITH_DYNAMIC_IPP=OFF  \
    -DBUILD_ZLIB=OFF  \
    -DBUILD_opencv_apps=OFF \
    -DBUILD_opencv_calib3d=OFF \
    -DBUILD_opencv_core=ON \
    -DBUILD_opencv_features2d=OFF \
    -DBUILD_opencv_flann=OFF \
    -DBUILD_opencv_highgui=OFF \
    -DBUILD_opencv_imgcodecs=OFF \
    -DBUILD_opencv_imgproc=ON \
    -DBUILD_opencv_ml=OFF \
    -DBUILD_opencv_objdetect=OFF \
    -DBUILD_opencv_photo=OFF \
    -DBUILD_opencv_python2=OFF \
    -DBUILD_opencv_python3=OFF \
    -DBUILD_opencv_shape=OFF \
    -DBUILD_opencv_stitching=OFF \
    -DBUILD_opencv_superres=OFF \
    -DBUILD_opencv_ts=OFF \
    -DBUILD_opencv_video=ON \
    -DBUILD_opencv_videoio=OFF \
    -DBUILD_opencv_videostab=OFF \
    -DBUILD_opencv_world=OFF \
    -DWITH_IPP=OFF \
    -DWITH_FFMPEG=OFF \
    -DWITH_CUDA=OFF \
    -DWITH_CUFFT=OFF \
    -DWITH_EIGEN=OFF \
    -DWITH_JASPER=OFF \
    -DWITH_JPEG=OFF \
    -DWITH_PNG=OFF \
    -DWITH_PTHREADS_PF=OFF \
    -DWITH_OPENEXR=OFF \
    -DWITH_MATLAB=OFF \
    -DWITH_TBB=OFF \
    -DWITH_TIFF=OFF \
    -DWITH_WEBP=OFF \
    -DANDROID_NATIVE_API_LEVEL=${API_LEVEL} ../../

    make clean
    make -j8
    make install
}

function mv_dirs {
    rm -rf $2
    mkdir -p $2
    mv $1/* $2/
}

function build_opencv {
    rm -rf $1
    mkdir $1
    cd $1

    build_opencv_modules $1 $2

    OPENCV_LIBS_PATH="./install/sdk/native/libs/$1"
    OUTPUT_LIBS_PATH="../opencv/$1"
    mv_dirs ${OPENCV_LIBS_PATH} ${OUTPUT_LIBS_PATH}

    OTHER_LIBS_PATH="./install/sdk/native/3rdparty/libs/$1"
    OUTPUT_3RDPARTY_LIBS_PATH="../3rdparty/$1"
    mv_dirs ${OTHER_LIBS_PATH} ${OUTPUT_3RDPARTY_LIBS_PATH}

    INCLUDE_PATH="./install/sdk/native/jni/include"
    OUTPUT_INCLUDE_PATH="../opencv/include"
    mv_dirs ${INCLUDE_PATH} ${OUTPUT_INCLUDE_PATH}

    cd ..
    rm -rf $1

    cur_path=$(pwd)
    echo ${cur_path}
}


rm -rf build_android
mkdir build_android
cd build_android
mkdir opencv
mkdir 3rdparty

build_opencv armeabi-v7a 16
build_opencv arm64-v8a 21

操作步骤:
1、将其保存在 build_android.sh 并赋予执行权限
2、下载 OpenCV 源码并解压(我编译的 opencv-3.1.0 版本,opencv 所有 release 版本
3、将 build_android.sh 放入解压后的目录(如:opencv-3.1.0)
4、进入解压目录 opencv-3.1.0,执行 :

./build_android.sh

5、生成的编译好的库在 opencv-3.1.0 下的 build_android 目录
6、使用时在 CMakeList 里添加 opencv 依赖,注意:被依赖的库要在下面,否则编译连接的时候会提示 opencv 的某些函数未定义。

${OPENCV_LIB_PATH}/libopencv_video.a
${OPENCV_LIB_PATH}/libopencv_imgproc.a
${OPENCV_LIB_PATH}/libopencv_core.a

目录结构如下:
在这里插入图片描述
在这里插入图片描述

github 地址:
https://github.com/alanwang4523/OpenCV_Build4Android

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章