opencv2.4 android编译
背景见我的前一篇博客:opencv 编译Simple,转眼6年过去了,最近有个东西想尝试基于opencv来做,所以有本文。
一些背景知识
- opencv1.1已经不再维护,目前只能从github中找到一个历史的版本: https://github.com/archith/opencv_1.1
- opencv2.x 3.x 4.x 5.x 都有完善的cmake编译脚本,编译起来都比较容易。参考我前一篇博客
- opencv2.x 中含有nonfree的模块,比如surf,sirf。这部分代码在后面的仓库中,被移动到 opencv_contrib 中。
- https://opencv.org/releases/ 中提供的库都没有包含nonfree的模块,如果需要使用nofree的模块需要自己拉代码下来编译。
- 一些基于release做二次处理的库,比如
https://github.com/nihui/opencv-mobile
也是没有包含nonfree的模块。
opencv2.4.13.7 for android
ubuntu22
ubuntu18
Before start
# ubuntu 22
sudo apt-get install libgtk2.0-dev
Get souce code
git clone https://github.com/opencv/opencv.git
cd opencv
git checkout 2.4.13.7
Make for android
download ndk: https://developer.android.google.cn/ndk/downloads?hl=zh-cn
export ANDROID_NDK=/home/yeshen_org/Android/android-ndk-r20b && \
export ANDROID_SDK_ROOT=/home/yeshen_org/Android/Sdk && \
export ANDROID_SDK_ROOT=/home/yeshen_org/Android/Sdk && \
export ANDROID_NATIVE_API_LEVEL=24 && \
export STRIP=/home/yeshen_org/Android/android-ndk-r20b/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-strip
# arm64-v8a
rm -rf build-arm64 && mkdir build-arm64 && cd build-arm64
cmake -DCMAKE_TOOLCHAIN_FILE=/home/yeshen_org/Android/android-ndk-r20b/build/cmake/android.toolchain.cmake \
-DANDROID_TOOLCHAIN=clang++ -DANDROID_ABI=arm64-v8a \
-D CMAKE_BUILD_TYPE=Release -D ANDROID_NATIVE_API_LEVEL=24 \
-D WITH_CUDA=OFF -D WITH_MATLAB=OFF \
-D BUILD_ANDROID_EXAMPLES=OFF -D BUILD_DOCS=OFF \
-D BUILD_PERF_TESTS=OFF -D BUILD_TESTS=OFF \
-D ANDROID_STL=c++_shared -D BUILD_SHARED_LIBS=ON \
-D BUILD_opencv_objdetect=ON -D BUILD_opencv_video=ON \
-D BUILD_opencv_videoio=ON -D BUILD_opencv_features2d=ON \
-D BUILD_opencv_flann=ON -D BUILD_opencv_highgui=ON \
-D BUILD_opencv_ml=ON -D BUILD_opencv_photo=ON \
-D BUILD_opencv_python=OFF \
-D BUILD_androidcamera=OFF \
-D BUILD_opencv_legacy=ON \
-D BUILD_opencv_ocl=ON \
-D BUILD_opencv_gpu=ON \
-DBUILD_ANDROID_PROJECTS=OFF ..
make -j8
# see lib/arm64-v8a
# armeabi-v7a
rm -rf build-arm32 && mkdir build-arm32 && cd build-arm32
cmake -DCMAKE_TOOLCHAIN_FILE=/home/yeshen_org/Android/android-ndk-r20b/build/cmake/android.toolchain.cmake \
-DANDROID_TOOLCHAIN=clang++ -DANDROID_ABI=armeabi-v7a \
-D CMAKE_BUILD_TYPE=Release -D ANDROID_NATIVE_API_LEVEL=24 \
-D WITH_CUDA=OFF -D WITH_MATLAB=OFF \
-D BUILD_ANDROID_EXAMPLES=OFF -D BUILD_DOCS=OFF \
-D BUILD_PERF_TESTS=OFF -D BUILD_TESTS=OFF \
-D ANDROID_STL=c++_shared -D BUILD_SHARED_LIBS=ON \
-D BUILD_opencv_objdetect=ON -D BUILD_opencv_video=ON \
-D BUILD_opencv_videoio=ON -D BUILD_opencv_features2d=ON \
-D BUILD_opencv_flann=ON -D BUILD_opencv_highgui=ON \
-D BUILD_opencv_ml=ON -D BUILD_opencv_photo=ON \
-D BUILD_opencv_python=OFF \
-D BUILD_androidcamera=OFF \
-D BUILD_opencv_legacy=ON \
-D BUILD_opencv_ocl=ON \
-D BUILD_opencv_gpu=ON \
-DBUILD_ANDROID_PROJECTS=OFF ..
make -j8
# see lib/armeabi-v7a
# x86
rm -rf build-x86 && mkdir build-x86 && cd build-x86
cmake -DCMAKE_TOOLCHAIN_FILE=/home/yeshen_org/Android/android-ndk-r20b/build/cmake/android.toolchain.cmake \
-DANDROID_TOOLCHAIN=clang++ -DANDROID_ABI=x86 \
-D CMAKE_BUILD_TYPE=Release -D ANDROID_NATIVE_API_LEVEL=24 \
-D WITH_CUDA=OFF -D WITH_MATLAB=OFF \
-D BUILD_ANDROID_EXAMPLES=OFF -D BUILD_DOCS=OFF \
-D BUILD_PERF_TESTS=OFF -D BUILD_TESTS=OFF \
-D ANDROID_STL=c++_shared -D BUILD_SHARED_LIBS=ON \
-D BUILD_opencv_objdetect=ON -D BUILD_opencv_video=ON \
-D BUILD_opencv_videoio=ON -D BUILD_opencv_features2d=ON \
-D BUILD_opencv_flann=ON -D BUILD_opencv_highgui=ON \
-D BUILD_opencv_ml=ON -D BUILD_opencv_photo=ON \
-D BUILD_opencv_python=OFF \
-D BUILD_androidcamera=OFF \
-D BUILD_opencv_legacy=ON \
-D BUILD_opencv_ocl=ON \
-D BUILD_opencv_gpu=ON \
-DBUILD_ANDROID_PROJECTS=OFF ..
make -j8
# see lib/x86
参考
- latest-android-ndk
玩~