廢話不多說。
準備工作:
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
祝你使用愉快。 有什麼問題, 歡迎指出, 以便更正。