Android studio 上配置 opencv 的环境

前言,搭载用了一个下午一个晚上加半个半夜,现在是凌晨3点。经过不懈的查找文章、下载·······一系列操作,终于在Android真机 可以运行opencv程序了,放图庆祝下

手机能运行opencv吗 手机 opencv_手机能运行opencv吗


手机能运行opencv吗 手机 opencv_opencv_02

前言:之前看了很多文章,方法都不一样,我也走了大概至少6个小时的坑,所以后面大家可以重新创建一个empty 程序 重头开始(这个可以解决手机上opencv manager package 安装的问题)

回到正题,讲下我的过程

  1. 下载最新的opencv-sdk ,保存好,然后注意了,我们在创建的新项目里导入 File- new- impor moudule 找到我们opencv-sdk目录下的sdk,命名为opencvsdk;
    z
    这个需要好一会儿时间1分钟左右,不要慌。这里如果的导入的时候报错,我当时解决办法是

    在SDKTools 里面配置了** NDK 和CMake**, (大概就是我给出图片里面,其他的印象里都没点),这个点击finish即可,这里安装好,可以回去再导入opencv里的sdk文件(这一步很重要,我看其他文章很多都是导入java,我之前试了,da mei da)
    2.sdk 文件导入后

我这里是这样显示的

3.接下来是修改app和opencv的 build.gradle

修改的第一点是

手机能运行opencv吗 手机 opencv_app_03

这4个opencv-gradle数值和自己app里面的数值标齐
第二点是检测 opencv-gradle 中的apply plugin: ‘com.android.library’ 这个是正确的,其他类型的改为这个就可以。

第三点是在 app-gradle 里面dependencies 添加
implementation project(’:opencvsdk’)
添加完自己SYNC一下。
(这里提个醒,其他文章里面写的是在 project structure里面 dependencies 然后app 然后➕ 号那边 添加 moudule ,我那里无法添加,所以就直接在代码里添加了。选一种就可,2种都用也行)

  1. 然后应该配置差不多了,自己找点源码(我用的是其他大佬的源码,也就不公开在文章贴出来了)
    源码里有一点要注意的是代码里面的 onResume()方法,下面我贴上去的是新版的,直接复制使用即可。
public void onResume()
    {
        super.onResume();
        if (!OpenCVLoader.initDebug()) {
            Log.d(TAG, "Internal OpenCV library not found. Using OpenCV Manager for initialization");
            OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_0_0, this, mLoaderCallback);
        } else {
            Log.d(TAG, "OpenCV library found inside package. Using it!");
            mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS);
        }
        //super.onResume();
        //OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_9, this, mLoaderCallback);
    }

我把我的 opencv-sdk-build-gradle代码贴出来,大家对下,应该问题不大(可能这里面有漏讲的,老铁们对下吧,印象里这里面我应该就复制粘贴改了改,其他没怎么动。太困了太困了,2021-0807-3.35 )

apply plugin: 'com.android.library'

println "OpenCV: " + project.buildscript.sourceFile

android {
    compileSdkVersion 30
    buildToolsVersion "30.0.3"
    //buildToolsVersion "x.y.z" // not needed since com.android.tools.build:gradle:3.0.0

    defaultConfig {
        minSdkVersion 16
        targetSdkVersion 30
        externalNativeBuild {
            cmake {
                arguments "-DANDROID_STL=c++_shared"
                targets "opencv_jni_shared"
            }
        }
    }

    buildTypes {
        debug {
            packagingOptions {
                doNotStrip '**/*.so'  // controlled by OpenCV CMake scripts
            }
        }
        release {
            packagingOptions {
                doNotStrip '**/*.so'  // controlled by OpenCV CMake scripts
            }
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_6
        targetCompatibility JavaVersion.VERSION_1_6
    }

    sourceSets {
        main {
            jniLibs.srcDirs = ['native/libs']
            java.srcDirs = ['java/src']
            aidl.srcDirs = ['java/src']
            res.srcDirs = ['java/res']
            manifest.srcFile 'java/AndroidManifest.xml'
        }
    }

    externalNativeBuild {
        cmake {
            path (project.projectDir.toString() + '/libcxx_helper/CMakeLists.txt')
        }
    }
}

dependencies {
}

这个是app的 build-gradle

plugins {
    id 'com.android.application'
}

android {
    compileSdkVersion 30
    buildToolsVersion "30.0.3"

    defaultConfig {
        applicationId "com.example.myapplication"
        minSdkVersion 16
        targetSdkVersion 30
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

dependencies {

    implementation 'androidx.appcompat:appcompat:1.2.0'
    implementation 'com.google.android.material:material:1.2.1'
    implementation 'androidx.constraintlayout:constraintlayout:2.0.1'
    testImplementation 'junit:junit:4.+'
    androidTestImplementation 'androidx.test.ext:junit:1.1.2'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
    implementation project(':opencvsdk')
}

晚安玛卡巴卡,大家加油!