asysbang

标题: android编译opencv [打印本页]

作者: admin    时间: 2022-1-6 10:43
标题: android编译opencv
最新编译命令
cmake -DANDROID_NATIVE_API_LEVEL=android-24 -DANDROID_ABI=x86_64 -DCMAKE_TOOLCHAIN_FILE=/home/karl/work/tools/android/Sdk/ndk/23.1.7779620/build/cmake/android.toolchain.cmake -DCMAKE_CXX_COMPILER=/usr/bin/g++ -DCMAKE_C_COMPILER=/usr/bin/gcc ../
gradle编译不过,设置org.gradle.java.home=/usr/lib/jvm/java-11-openjdk-amd64
./gradle/wrapper/gradle-wrapper.properties:3:distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-all.zip  改成
distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip






export ANDROID_NDK=/home/karl/Android/Sdk/ndk-bundle

mkdir opencv_android

cd opencv_android
cmake -DANDROID_NATIVE_API_LEVEL=android-24  -DANDROID_ABI=armeabi-v7a -DCMAKE_TOOLCHAIN_FILE=../platforms/android/android.toolchain.cmake ../
make -j8 && make install

mkdir opencv_android_x86_64

cd opencv_android_x64
cmake -DANDROID_NATIVE_API_LEVEL=android-24 -DANDROID_ABI=x86_64 -DCMAKE_TOOLCHAIN_FILE=../platforms/android/android.toolchain.cmake ../
make -j8

对于编译不过的模块可以关闭
-D BUILD_opencv_video=OFF -D BUILD_opencv_videoio=OFF

stoull函数改成 size_t v = (size_t)        atoll(valueStr.c_str());
作者: admin    时间: 2022-1-6 10:57
http://www.cplusplus.com/reference/string/stoull/

可以把找不到的函数 抄过去
unsigned long long stoull (const std::string&  str, size_t* idx = 0, int base = 10);
注意string& 前面要加上std::

====下面的简单,但是有些函数不行
或者std::round  改成round   但是有些不行


android 调用opencv 一定要先OpenCVLoader.initAsync

否则会报错"java.lang.UnsatisfiedLinkError: No implementation found for long org.opencv.core.Mat.n_Mat"
作者: admin    时间: 2022-1-6 15:45
cmake -DANDROID_NATIVE_API_LEVEL=android-25 -DANDROID_ABI=armeabi-v7a -D BUILD_opencv_video=OFF -D BUILD_opencv_videoio=OFF -D BUILD_opencv_dnn=OFF -D BUILD_opencv_calib3d=OFF \
-D BUILD_opencv_gapi=OFF -DCMAKE_TOOLCHAIN_FILE=../platforms/android/android.toolchain.cmake ../

cmake -DANDROID_NATIVE_API_LEVEL=android-25 -DANDROID_ABI=arm64-v8a -D BUILD_opencv_video=OFF -D BUILD_opencv_videoio=OFF -D BUILD_opencv_dnn=OFF -D BUILD_opencv_calib3d=OFF \
-D BUILD_opencv_gapi=OFF -DCMAKE_TOOLCHAIN_FILE=../platforms/android/android.toolchain.cmake ../

cmake -DANDROID_NATIVE_API_LEVEL=android-25 -DANDROID_ABI=x86 -D BUILD_opencv_video=OFF -D BUILD_opencv_videoio=OFF -D BUILD_opencv_dnn=OFF -D BUILD_opencv_calib3d=OFF \
-D BUILD_opencv_gapi=OFF -DCMAKE_TOOLCHAIN_FILE=../platforms/android/android.toolchain.cmake ../
作者: admin    时间: 2022-1-6 18:05
    private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
        @Override
        public void onManagerConnected(int status) {
            super.onManagerConnected(status);
            Log.e("","========onManagerConnected="+status);
            Mat mat = new Mat(120, 120, CvType.CV_8UC4);
            Log.e("","========cols111="+mat.cols());
        }
    };

    @Override
    public void onResume()
    {
        super.onResume();
        if (!OpenCVLoader.initDebug()) {
            Log.d("aaa", "===Internal OpenCV library not found. Using OpenCV Manager for initialization");
            OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_0_0, this, mLoaderCallback);
        } else {
            Log.d("", "=====OpenCV library found inside package. Using it!");
            mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS);
        }
    }




欢迎光临 asysbang (http://asysbang.com/) Powered by Discuz! X2.5