編譯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

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