編譯opencv的android版本(with ffmpeg)
阿新 • • 發佈:2019-01-30
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