Ubuntu下编译opencv4.1.0+opencv_contrib4.1.0 android sdk

前言

虽然opencv已经有编译好的android sdk了,但是如果要用opencv_contrib里面的模块的话,肯定得自己编译了。但是其实也不难,因为opencv已经为用户准备了编译android sdk的python脚本文件(build_sdk.py)了,只需要搭建好合适的环境,改一些参数就可以生成我们想要的动态库或者静态库文件了。
我在编译的时候,参考了这篇博客:Compile opencv+opencv_contrib lib for Android,感谢博主。

正文

(1)我的环境

  • 系统环境
    Linux环境: VirtualBox6.0 + Ubuntu18.0.4
    java环境:Linux安装java
    python: Linux Python安装

  • opencv&Android
    opencv4.1.0 + opencv4.1.0_contrib: GitHub上都有,直接clone下来即可
    android sdk tools 的版本要用25.2.5,链接地址:sdk/tools,文件下载下来后放入sdk目录下替换之前的tools文件
    android ndk r18c: Android NDK Download(因为我看到opencv4.1.0/platforms/android里有配置文件,名称带有ndk-18的字样)

  • 一些必要的工具

  • re2c : sudo apt-get install re2c
    ninja-build : sudo apt-get install ninja-build
    libcurl4-openssl-dev: sudo apt-get install libcurl4-openssl-dev
    libgtk2.0-dev: sudo apt-get install libgtk2.0-dev
    pkg-config: sudo apt-get install pkg-config

(2)步骤

我的目录结构:

opencv_build
–build
–opencv-4.1.0
–opencv_contrib-4.1.0
其中,build作为最后生成的文件存放地。环境变量需要设置的有:NDK_PATH、SDK_PATH,两者分别指示Android ndk和sdk所在位置。最好直接在/etc/profile文件中设置,编译时也在超级用户下,可以省去一些不必要的麻烦。

build_sdk.py脚本文件中的参数如下:

Ubuntu下编译opencv4.1.0+opencv_contrib4.1.0 android sdk_第1张图片
命令:在opencv4.1.0/platforms/android下执行,

python build_sdk.py --ndk_path NDK_PATH --sdk_path SDK_PATH --extra_modules_path ~/opencv_build/opencv_contrib-4.1.0/modules
/opencv_build/build ../..

解释:前三个参数分别是ndk、android sdk和opencv_contrib的modules地址,参数’/opencv_build/build’是work_dir,也就是文件存放地,
最后一个参数’…/…’,自然就是回退到opencv4.1.0/目录下,也就是opencv_dir参数。

记录一下编译时改变的一些值:

  • android-ndk/build/cmake/android.toolchain.cmake 第112行中,将gcc改为clang
    Ubuntu下编译opencv4.1.0+opencv_contrib4.1.0 android sdk_第2张图片

  • opencv-4.1.0/platforms/android/build_sdk.py 第113行,使用ANDROID_STL=“c++_shared"或"c++_static”,这里之前用了一个废弃的参数。编译时会报错
    Ubuntu下编译opencv4.1.0+opencv_contrib4.1.0 android sdk_第3张图片

  • opencv-4.1.0/CMakeLists.txt 第429行,将BUILD_ANDROID_PROJECTS由ON改为OFF(设置为ON似乎是会生成apk包,生成过程中有诸多错误,本来也不用apk包,所以直接设为OFF)。

  • opencv-4.1.0/CMakeLists.txt 第426行,设置BUILD_SHARED_LIBS为ON来生成动态库(不改的话生成的是静态库)

  • 这部分其实有挺多参数的,可以根据自己的需要进行更改。
    Ubuntu下编译opencv4.1.0+opencv_contrib4.1.0 android sdk_第4张图片

  • 编译的命令可以加上–no_ccache,不过不加也不会怎样,就是会报错,但程序还是可以正常进行下去

(3)后记

以上步骤写得粗糙,主要是参照开头说的博客,根据某些版本的不同会有一些更改,主要是看编译时报的错误来修改的。

你可能感兴趣的:(实习日记)