美文网首页
opencv+opencv_contrib交叉编译android

opencv+opencv_contrib交叉编译android

作者: 有心人2021 | 来源:发表于2021-03-21 15:30 被阅读0次

    因为项目需要编译opencv安卓动态库,应用于armv8-64平台,记录下编译过程。

    一、交叉编译环境

    1. 系统:centos 8.1
    2. ndk
      ndk版本:/home/atguigu/ex/android-ndk-r20b
      ndk地址:https://developer.android.google.cn/ndk/downloads/index.html
    #修改环境变量
    sudo vim etc/profile
    #etc/profile末尾
    export NDKROOT=/home/atguigu/ex/android-ndk-r20b
    export PATH=$NDKROOT:$PATH
    #启用环境变量
    source profile
    
    1. cmake安装
      cmake:cmake version 3.18.6
      具体详细见:
      https://www.jianshu.com/p/fe902d61bcdb
    2. ant安装
      为了能打包生成.so需要ant,
    sudo yum -y install ant
    #配置/etc/profile
    export ANT_HOME="/usr/share/ant" # do not add "bin" at the end of the path
    export PATH="$ANT_HOME/bin:$PATH"
    #启用环境变量
    source profile
    

    二.编译opencv

    1.下载编译文件

    #进入用户空间
    cd ~
    #创建文件夹
    mkdir opencv_jar_build
    
    cd opencv_jar_build
    #下载opencv
    wget https://github.com/opencv/opencv/archive/refs/tags/3.4.12.tar.gz
    #解压opencv
    tar -zxvf 3.4.12.tar.gz
    rm *.gz
    #下载opencv_contrib,并解压
    wget https://github.com/opencv/opencv_contrib/archive/refs/tags/3.4.12.tar.gz
    tar -zxvf 3.4.12.tar.gz
    ls -l
    drwxrwxr-x 14 atguigu atguigu  303 Mar 21 11:37 opencv-3.4.12
    drwxrwxr-x  6 atguigu atguigu  176 Sep 29 05:29 opencv_contrib-3.4.12
    

    2.创建编译脚本
    命令过长,得用脚本
    在opencv_jar_build下,即opencv-3.4.12同级别下

    #创建.sh文件
    touch build.sh
    vim build.sh
    
    #build.sh内容
    rm -rf build
    mkdir build
    cd build
    
    #-DCMAKE_INSTALL_PREFIX="/home/atguigu/opencv_jar_build/install" \
    #注意cmake语法,=ON后面需要带英文空格,\表示换行,后面加换行到下一行
    cmake -DCMAKE_BUILD_WITH_INSTALL_RPATH=ON \
            -DCMAKE_TOOLCHAIN_FILE="${NDKROOT}/build/cmake/android.toolchain.cmake"\
            -DANDROID_NDK="${NDKROOT}" \
            -DANDROID_NATIVE_API_LEVEL=24 \
            -DANDROID_ABI="arm64-v8a" \
            -D WITH_CUDA=OFF \
            -D WITH_MATLAB=OFF \
            -DANDROID_STL=c++_static \
            -DBUILD_ANDROID_PROJECTS=OFF \
            -DBUILD_ANDROID_EXAMPLES=OFF \
            -D BUILD_DOCS=OFF \
            -DBUILD_OPENCV_JAVA=ON \
            -DANT_EXECUTABLE=${ANT_HOME} \
            -D BUILD_PERF_TESTS=OFF \
            -D BUILD_TESTS=OFF \
            -DOPENCV_EXTRA_MODULES_PATH="/home/atguigu/opencv_jar_build/opencv_contrib-3.4.12/modules/" \
            -DCMAKE_INSTALL_PREFIX="/home/atguigu/opencv_jar_build/opencv-3.4.12" \
            ../opencv-3.4.12
    #多线程编译
    make -j8 
    #安装编译结果,这里会安装到/home/atguigu/opencv_jar_build/opencv-3.4.12/sdk下
    make install
    

    也用opencv4.5.1,加上ant试了n次都报错,去掉又可以,有点莫名奇妙
    3.4.12可以

    #目标结果
    cd /home/atguigu/opencv_jar_build/opencv-3.4.12/sdk
    tree -L 2
    .
    ├── etc
    │   ├── haarcascades
    │   ├── lbpcascades
    │   ├── licenses
    │   ├── valgrind_3rdparty.supp
    │   └── valgrind.supp
    └── native
        ├── 3rdparty
        ├── jni
        ├── libs
        └── staticlibs
    

    staticlibs中有.so,jni中有include,这是android所需要的

    相关文章

      网友评论

          本文标题:opencv+opencv_contrib交叉编译android

          本文链接:https://www.haomeiwen.com/subject/vknncltx.html