在opencv的sdk里面拷贝一个include和lib库,结构如下
~/opencl_sdk
├── include
│ └── CL
│ ├── cl_d3d10.h
│ ├── cl_d3d11.h
│ ├── cl_dx9_media_sharing.h
│ ├── cl_egl.h
│ ├── cl_ext.h
│ ├── cl_gl_ext.h
│ ├── cl_gl.h
│ ├── cl.h
│ ├── cl.hpp
│ ├── cl_platform.h
│ └── opencl.h
├── lib
│ └── libOpenCL.so
在~下创建一个opencv目录,然后将我们的opencv的源码拷贝进去
mkdir opencv
cd opencv
cp -a ~/opencv-3.3.0 .
mkdir build
在~/.bashrc里面加上ndk和cmake的环境变量
export ANDROID_NDK=/opt/android-ndk-r14b
export PATH=$PATH:/opt/android-ndk-r14b:/opt/arm-linux-androideabi/bin:~/android/prebuilts/sdk/tools/linux/bin:/usr/bin/:/usr/local/cmake-3.0.1/bin
export OPENCL_SDK=~/opencl_sdk
保存后source一下
source ~/.bashrc
然后进入到build目录下进行配置
cd ~/opencv/build
cmake -Wno-dev \
-DCMAKE_CXX_FLAGS=-std=c++11 \-DCMAKE_TOOLCHAIN_FILE=../opencv-3.3.0/platforms/android/android.toolchain.cmake \
-DANDROID_ABI="arm64-v8a" \
-DCMAKE_BUILD_WITH_INSTALL_RPATH=ON \
-DBUILD_ANDROID_EXAMPLES=OFF \
-DBUILD_SHARED_LIBS=ON \
-DINSTALL_ANDROID_EXAMPLES=OFF \
-DWITH_OPENCL=YES \
-DANDROID_OPENCL_SDK=$OPENCL_SDK \
-DANDROID_NATIVE_API_LEVEL=14 \
-DANDROID_SDK_TARGET=24 \
../opencv-3.3.0
配置完后编译
make -j8
最后安装
make install
在~/opencv/build/install/sdk/native/libs/arm64-v8a下就会生成动态库
但是生成的动态库里面并没有发现libopencv_java3.so
在CMakeLists.txt里面查看Java的部分如下
# ========================== java ==========================
status("")
status(" Java:")
status(" ant:" ANT_EXECUTABLE THEN "${ANT_EXECUTABLE} (ver ${ANT_VERSION})" ELSE NO)
if(NOT ANDROID)
status(" JNI:" JNI_INCLUDE_DIRS THEN "${JNI_INCLUDE_DIRS}" ELSE NO)
endif()
status(" Java wrappers:" HAVE_opencv_java THEN YES ELSE NO)
status(" Java tests:" BUILD_TESTS AND opencv_test_java_BINARY_DIR THEN YES ELSE NO)
这里可以知道编译生成libopencv_java.so需要满足ANT_EXECUTABLE