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
)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值