OpenCV C++自定义模块编译 (Android JNI 接口)
本文主要讲述如何在构建OpenCV库,支持在Android设备上运行,并支持 opencv-mobile 中不支持的功能,比如:视频读写功能。具体步骤如下:
Step 1: 下载 OpenCV 4.9.0
git clone https://github.com/opencv/opencv.git
git checkout 4.9.0
Step 2: 在OpenCV文件夹下创建 options.txt 文件,内容如下:
-DBUILD_ZLIB=OFF
-DBUILD_TIFF=OFF
-DBUILD_OPENJPEG=OFF
-DBUILD_JASPER=OFF
-DBUILD_JPEG=OFF
-DBUILD_PNG=OFF
-DBUILD_OPENEXR=OFF
-DBUILD_WEBP=OFF
-DBUILD_TBB=OFF
-DBUILD_IPP_IW=OFF
-DBUILD_ITT=OFF
-DWITH_AVFOUNDATION=OFF
-DWITH_CAP_IOS=OFF
-DWITH_CAROTENE=OFF
-DWITH_CPUFEATURES=OFF
-DWITH_EIGEN=OFF
-DWITH_FFMPEG=OFF
-DWITH_GSTREAMER=OFF
-DWITH_GTK=OFF
-DWITH_IPP=OFF
-DWITH_HALIDE=OFF
-DWITH_VULKAN=OFF
-DWITH_INF_ENGINE=OFF
-DWITH_NGRAPH=OFF
-DWITH_JASPER=OFF
-DWITH_OPENJPEG=OFF
-DWITH_JPEG=OFF
-DWITH_WEBP=OFF
-DWITH_OPENEXR=OFF
-DWITH_PNG=OFF
-DWITH_TIFF=OFF
-DWITH_OPENVX=OFF
-DWITH_GDCM=OFF
-DWITH_TBB=OFF
-DWITH_HPX=OFF
-DWITH_OPENMP=ON
-DWITH_PTHREADS_PF=OFF
-DWITH_V4L=OFF
-DWITH_CLP=OFF
-DWITH_OPENCL=OFF
-DWITH_OPENCL_SVM=OFF
-DWITH_VA=OFF
-DWITH_VA_INTEL=OFF
-DWITH_ITT=OFF
-DWITH_PROTOBUF=OFF
-DWITH_IMGCODEC_HDR=OFF
-DWITH_IMGCODEC_SUNRASTER=OFF
-DWITH_IMGCODEC_PXM=OFF
-DWITH_IMGCODEC_PFM=OFF
-DWITH_QUIRC=OFF
-DWITH_ANDROID_MEDIANDK=OFF
-DWITH_TENGINE=OFF
-DWITH_ONNX=OFF
-DWITH_TIMVX=OFF
-DWITH_OBSENSOR=OFF
-DWITH_CANN=OFF
-DWITH_FLATBUFFERS=OFF
-DBUILD_SHARED_LIBS=OFF
-DBUILD_opencv_apps=OFF
-DBUILD_ANDROID_PROJECTS=OFF
-DBUILD_ANDROID_EXAMPLES=OFF
-DBUILD_DOCS=OFF
-DBUILD_EXAMPLES=OFF
-DBUILD_PACKAGE=OFF
-DBUILD_PERF_TESTS=OFF
-DBUILD_TESTS=OFF
-DBUILD_WITH_STATIC_CRT=OFF
-DBUILD_FAT_JAVA_LIB=OFF
-DBUILD_ANDROID_SERVICE=OFF
-DBUILD_JAVA=OFF
-DBUILD_OBJC=OFF
-DBUILD_KOTLIN_EXTENSIONS=OFF
-DENABLE_PRECOMPILED_HEADERS=OFF
-DENABLE_FAST_MATH=ON
-DCV_TRACE=OFF
-DBUILD_opencv_java=OFF
-DBUILD_opencv_gapi=OFF
-DBUILD_opencv_objc=OFF
-DBUILD_opencv_js=OFF
-DBUILD_opencv_ts=OFF
-DBUILD_opencv_python2=OFF
-DBUILD_opencv_python3=OFF
-DBUILD_opencv_dnn=OFF
-DBUILD_opencv_imgcodecs=ON
-DBUILD_opencv_videoio=ON
-DBUILD_opencv_calib3d=OFF
-DBUILD_opencv_flann=OFF
-DBUILD_opencv_objdetect=OFF
-DBUILD_opencv_stitching=OFF
-DBUILD_opencv_ml=OFF
Step3: 编译OpenCV库
export ANDROID_SDK="/Users/wrj/Library/Android/sdk"
export PATH="${ANDROID_SDK}/cmake/3.22.1/bin:${PATH}"
export ANDROID_NDK="${ANDROID_SDK}/ndk/25.2.9519653"
export ANDROID_ABI="arm64-v8a"
export INSTALL_DIR="../install"
if [ ! -d "build" ]; then
mkdir build;
fi
cd build
cmake -G "Unix Makefiles" \
-DCMAKE_TOOLCHAIN_FILE=${ANDROID_NDK}/build/cmake/android.toolchain.cmake \
-DCMAKE_MAKE_PROGRAM="${ANDROID_NDK}/prebuilt/darwin-x86_64/bin/make" \
-DCMAKE_BUILD_TYPE=Release \
-DANDROID_ABI=${ANDROID_ABI} \
-DANDROID_NDK=${ANDROID_NDK} \
-DANDROID_PLATFORM=android-24 \
`cat ../options.txt` \
-DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} ..
cmake --build . -- -j6
make install
cd ..
Step4: 编译第三方依赖库 ade
export ADE_INSTALL_DIR=${INSTALL_DIR}/sdk/native/3rdparty/libs/arm64-v8a
cd 3rdparty
if [ ! -d "ade" ]; then
git clone https://github.com/opencv/ade.git
fi
cd ade
if [ ! -d "build" ]; then
mkdir build;
fi
cd build
cmake -G "Unix Makefiles" \
-DCMAKE_TOOLCHAIN_FILE=${ANDROID_NDK}/build/cmake/android.toolchain.cmake \
-DCMAKE_MAKE_PROGRAM="${ANDROID_NDK}/prebuilt/darwin-x86_64/bin/make" \
-DANDROID_ABI=${ANDROID_ABI} \
-DANDROID_NDK=${ANDROID_NDK} \
-DANDROID_PLATFORM=android-24 \
-DCMAKE_INSTALL_PREFIX="install" ..
make install
mv install/lib/libade.a ../../../install/sdk/native/3rdparty/libs/arm64-v8a
最终的结果如下:


浙公网安备 33010602011771号