Ubuntu16.04 编译 OpenCV for Android(更新版)

Ubuntu16.04编译OpenCV for Android(更新版)

本文为https://blog.csdn.net/lj402159806/article/details/76762228的更新版

编译版本

  • OpenCV 3.4.5

  • OpenCV 4.1.0

  • ndk-r18

编译环境

首先需要安装sdk tools,然后通过sdkmanager安装cmake和ndk

mkdir sdk && cd sdk
#下载sdk tools
wget https://dl.google.com/android/repository/sdk-tools-linux-4333796.zip
#解压sdk tools
unzip sdk-tools-linux-4333796.zip
cd tools/bin
#查看sdk列表
./sdkmanager --list
#安装cmake和ndk
./sdkmanager "cmake;3.6.4111459" "ndk-bundle"

在官网下载指定版本的源码
http://opencv.org/releases.html

编译opencv

进入源码目录新建一个opencvAndroid.sh脚本文件,内容如下

#!/bin/sh

export BASE_PATH=${HOME}/Android
export SDK_PATH=${BASE_PATH}/sdk
export NDK_PATH=${SDK_PATH}/ndk-bundle
export cmake=${SDK_PATH}/cmake/3.6.4111459/bin/cmake

rm -rf android_build
mkdir android_build
cd android_build

${cmake} -DANDROID_SDK=${SDK_PATH} \
         -DANDROID_NDK=${NDK_PATH} \
         -DCMAKE_TOOLCHAIN_FILE=${NDK_PATH}/build/cmake/android.toolchain.cmake \
         -DANDROID_PLATFORM=android-16 \
         -DANDROID_STL=c++_static \
         -DANDROID_ABI="armeabi-v7a with NEON" \
         -DBUILD_ANDROID_PROJECTS=OFF \
         -DBUILD_SHARED_LIBS=ON \
         -DBUILD_opencv_world=ON \
         -DCMAKE_INSTALL_PREFIX=./android_install \
         -DCMAKE_BUILD_TYPE=Release $@ ..

${cmake} --build . --config Release --target install -- -j16

然后执行该脚本./opencvAndroid.sh

完成后在android_build/android_install目录下可以找到头文件和库文件

编译opencv指定模块

只想编译core imgcodecs imgproc三个模块并且只需要支持JPEG PNG的话替换下面命令

${cmake} -DANDROID_SDK=${SDK_PATH} \
         -DANDROID_NDK=${NDK_PATH} \
         -DCMAKE_TOOLCHAIN_FILE=${NDK_PATH}/build/cmake/android.toolchain.cmake \
         -DANDROID_PLATFORM=android-16 \
         -DANDROID_STL=c++_static \
         -DANDROID_ABI="armeabi-v7a with NEON" \
         -DBUILD_ANDROID_PROJECTS=OFF \
         -DBUILD_SHARED_LIBS=OFF \
         -DBUILD_opencv_calib3d=OFF \
         -DBUILD_opencv_core=ON \
         -DBUILD_opencv_imgcodecs=ON \
         -DBUILD_opencv_imgproc=ON \
         -DBUILD_opencv_dnn=OFF \
         -DBUILD_opencv_features2d=OFF \
         -DBUILD_opencv_flann=OFF \
         -DBUILD_opencv_highgui=OFF \
         -DBUILD_opencv_java_bindings_generator=OFF \
         -DBUILD_opencv_ml=OFF \
         -DBUILD_opencv_objdetect=OFF \
         -DBUILD_opencv_photo=OFF \
         -DBUILD_opencv_shape=OFF \
         -DBUILD_opencv_stitching=OFF \
         -DBUILD_opencv_superres=OFF \
         -DBUILD_opencv_ts=OFF \
         -DBUILD_opencv_video=OFF \
         -DBUILD_opencv_videoio=OFF \
         -DBUILD_opencv_videostab=OFF \
         -DBUILD_opencv_world=OFF \
         -DBUILD_ZLIB=ON \
         -DBUILD_JPEG=ON \
         -DWITH_JPEG=ON \
         -DBUILD_JASPER=OFF \
         -DWITH_JASPER=OFF \
         -DBUILD_PNG=ON \
         -DWITH_PNG=ON \
         -DBUILD_WEBP=OFF \
         -DWITH_WEBP=OFF \
         -DBUILD_TIFF=OFF \
         -DWITH_TIFF=OFF \
         -DBUILD_OPENEXR=OFF \
         -DWITH_OPENEXR=OFF \
         -DWITH_IMGCODEC_HDR=OFF \
         -DWITH_IMGCODEC_SUNRASTER=OFF \
         -DWITH_IMGCODEC_PXM=OFF \
         -DBUILD_PROTOBUF=OFF \
         -DWITH_PROTOBUF=OFF \
         -DCV_TRACE=OFF \
         -DCMAKE_INSTALL_PREFIX=./android_install \
         -DCMAKE_BUILD_TYPE=Release $@ ..

注意:

由于我们这里生成的是静态库,因此在链接时需要把core放在最后,否则编译时会报undefined reference to cv::softdouble::operator/之类的问题

target_link_libraries(
    libopencv_imgcodecs
    libopencv_imgproc
    libopencv_core        // <--- Put core last
)
发布了174 篇原创文章 · 获赞 119 · 访问量 55万+

猜你喜欢

转载自blog.csdn.net/lj402159806/article/details/85780711