[OpenCV][Android] Build OpenCV Android SDK & enable OpenCL
Posted on 週三 04 十一月 2015 in Archive
設NDK環境變數
export ANDROID_NDK=/path/to/your/ndk
修改cmake參數
到opencv的source root
修改 platforms/scripts/cmake_android_arm.sh
加上-DWITH_OPENCL=ON
如果要加build opencv contrib也可以改在這裡
執行script
cd platform
./script/cmake_android_arm.sh
執行完後會在platform底下出現build_android_arm的資料夾 要修改資料夾路徑可以在platforms/scripts/cmake_android_arm.sh裡面修改
Make
進去build_android_arm直接make
cd build_android_arm
make -j4
NOTE: 這邊我有遇到一個奇怪的error
/usr/include/eigen3/unsupported/Eigen/src/MatrixFunctions/MatrixExponential.h:284:61: error: there are no arguments to 'log2' that depend on a template parameter, so a declaration of 'log2' must be available [-fpermissive]
m_squarings = (max)(0, (int)ceil(log2(m_l1norm / maxnorm)));
......
/usr/include/eigen3/unsupported/Eigen/src/MatrixFunctions/MatrixExponential.h:284:61: error: 'log2' was not declared in this scope
大致上是找不到log2這個function的意思 仔細看MatrixExponential.h 發現最前面有log2的宣告
#ifdef _MSC_VER
template <typename Scalar> Scalar log2(Scalar v) { using std::log; return log(v)/log(Scalar(2)); }
#endif
看起來是為了補充 Microsoft c+ compiler缺的log2 可能預設ndk用的std lib也沒有log2 為了方便,我這邊就--很dirty--的直接把ifdef那兩行註解掉 : P 直接用這裡寫的log2
在java專案裡使用
編好之後,原本 opencv android sdk 裡附的 opencv_java3.so 就在 build_android_arm/lib 裡 替換掉專案裡的opencv_java3.so就可以了 (當然,在java層要記得load :P)
另外也需要把用到的的opencv_contrib headers放到sdk裡 或是一起放到jni資料夾裡, 自己在Android.mk裡面加include路徑 就可以在jni c++ source裡面用opencv_contrib裡面的東西了~