Build opencv libraries for android arm, x86 ubuntu

废话不多说。

准备工作:

1. 下载源码: http://opencv.org/

编译平台:ubuntu14.04

opencv 2.4.6.1

本人用这种办法编译了opecv 2.4.9 的没有什么问题, 问题比opencv2.4.6.1还要少, 其实他们的原理是一样的.

opencv 源码根目录----${opencv_home}

2.

修改 ${opencv_home}/platforms/scripts/cmake_android_arm.sh 文件,添加编译选项 -DBUILD_SHARED_LIBS=ON 和 -DWITH_OPENCL=ON
修改后的cmake_android_arm.sh 文件如下:

#!/bin/sh
cd `dirname $0`/..

mkdir -p build_android_arm
cd build_android_arm

cmake -DCMAKE_BUILD_WITH_INSTALL_RPATH=ON -DCMAKE_TOOLCHAIN_FILE=../android/android.toolchain.cmake $@ ../..      -DBUILD_SHARED_LIBS=ON -DWITH_OPENCL=ON

3.

修改 ${opencv_home}/cmake/OpenCVDetectOpenCL.cmake

以便生成支持编译opencl 的编译选项:

OpenCVDetectOpenCL.cmake 40 行后面添加

set(OPENCL_FOUND YES)
set(OPENCL_INCLUDE_DIR your_ocl_include_dir)
#set(OPENCL_LIBRARY    you_opencl_lib_file_path)

一个是设置ocl头文件,一个设置opencl 库文件的, 上面把他注释掉了是因为本人要用的是动态显示调用的方式去调用opencl库的api, 这样就不用在编译的添加于设备相关的opencl库了。 

4.

修改 ${opencv_home}/CMakeLists.txt
OCV_OPTION(WITH_OPENCL "Include OpenCL Runtime support" ON IF (NOT IOS) )

这一步好像在opencv2.4.9 版本的源码不用设置可以。 

这个的主要目的是为了能是下一步生成支持opencl 的选项。


5.执行 ${opencv_home}/platforms/scripts/cmake_android_arm.sh

如果执行有问题, 设置NDK 路径:

终端执行:export NDKROOT=/xxxx/android-ndk-r9d

可以看到:
--   Other third-party libraries:
--     Use IPP:                     NO
--     Use Eigen:                   NO
--     Use TBB:                     NO
--     Use OpenMP:                  NO
--     Use GCD                      NO
--     Use Concurrency              NO
--     Use C=:                      NO
--     Use Cuda:                    NO
--     Use OpenCL:                  YES

这这样就能编译相关的库了。 不过如果没有设置

set(OPENCL_LIBRARY    you_opencl_lib_file_path)
这个可能会导致一些test 编译不过去,没有关系, ocl的相关库已经能编译好了。

6. 切换到 ${opencv_home}/platforms/build_android_arm 目录:

执行:make

等待编译完成吧...

7.最终Andorid动态库在${opencv_home}/platforms/build_android_arm/lib/armeabi-v7a下生成


对于Android x86 的同理Android arm 库的编译方法, 只是步骤2, 5操作脚本是 ${opencv_home}/platforms/scripts/cmake_android_x86.sh



祝你使用愉快。 有什么问题, 欢迎指出, 以便更正。









郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。