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