1. 下载opencv的源码
2. 在opencv的根目录下新建目录mybuild
3. 进入mybuild目录,执行命令:
cmake \
-D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D CUDA_FAST_MATH=ON \
-D WITH_CUFFT=ON \
-D WITH_NVCUVID=ON \
-D WITH_V4L=ON \
-D WITH_LIBV4L=ON \
-D WITH_FFMPEG=ON \
-DCMAKE_TOOLCHAIN_FILE=\
../platforms/android/android.toolchain.cmake \
-DANDROID_NDK=/home/zhht/Android/android-ndk-r11c/ \
-DCMAKE_BUILD_TYPE=Release \
-DANDROID_ABI=armeabi-v7a \
-DANDROID_NATIVE_API_LEVEL=21 ..
或者用这个:
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D CUDA_FAST_MATH=ON -D WITH_CUFFT=ON -D WITH_NVCUVID=ON -D WITH_V4L=ON -D WITH_LIBV4L=ON -D OPENCV_EXTRA_MODULES_PATH=/home/zhht/github/opencv_contrib/modules -D WITH_FFMPEG=ON -DCMAKE_TOOLCHAIN_FILE=../platforms/android/android.toolchain.cmake -DANDROID_NDK=/home/zhht/Android/android-ndk-r11c/ -DCMAKE_BUILD_TYPE=Release -DANDROID_ABI=armeabi-v7a -DANDROID_NATIVE_API_LEVEL=21 -DANDROID_SDK_ROOT=/home/zhht/Android/Sdk/ ..
4. 有时WITH_FFMPEG的flag设置后,不一定能生效,需要修改opencv根目录下的CMakeLists.txt文件和cmake文件夹下面的OpenCVFindLibsVideo.cmake文件。
5. 手动修改文件/home/zhht/opencv/opencv/modules/java/CMakeLists.txt
if(ANDROID)
link_directories("/home/zhht/repo/ffmpeg/android/arm/lib")
ocv_target_link_libraries(${the_module} LINK_PUBLIC jnigraphics) # for Mat <=> Bitmap converters
ocv_target_link_libraries(${the_module} LINK_PUBLIC log dl z)
ocv_target_link_libraries(${the_module} LINK_PRIVATE avcodec avformat avutil swscale)
ocv_target_link_libraries(${the_module} LINK_PRIVATE ${OPENCV_LINKER_LIBS})
5. 编译后会出现链接不到ffmpeg库的情况,手动修改modules/java/CMakeFiles/opencv_java.dir/link.txt文件,加上要链接的库路径和ffmpeg库
-L/home/zhht/repo/ffmpeg/android/arm/real_lib/ -lavcodec -lavformat -lavutil -lswscale