编译opencv的android版本(with ffmpeg)


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

猜你喜欢

转载自blog.csdn.net/htjoy1202/article/details/80255298