Android Studio配置OpenCV中遇到的问题以及解决

系列文章目录

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
第一章 Android Studio通过JNI配置Opencv 使用opencv进行人脸识别
https://blog.csdn.net/weixin_43911199/article/details/124073247
第二章 Android Studio配置OpenCV中遇到的问题以及解决
第三章 Android Studio使用OpenCV 进行人脸识别

前言

第一章写了Android Studio通过JNI配置opencv,这篇主要写我在配置opencv的过程中遇到的问题以及解决方式。

一、遇到的第一个问题

No signature of method: build_27zg39k22lfw8qu4nm9ijpiyl.android() is applicable for argument types: (build_27zg39k22lfw8qu4nm9ijpiyl r u n c l o s u r e 1 ) v a l u e s : [ b u i l d 2 7 z g 39 k 22 l f w 8 q u 4 n m 9 i j p i y l _run_closure1) values: [build_27zg39k22lfw8qu4nm9ijpiyl runclosure1)values:[build27zg39k22lfw8qu4nm9ijpiyl_run_closure1@ad3449c]

Android Studio配置OpenCV中遇到的问题以及解决_第1张图片
原因:在build.gradle中,我把abiFilters 'armeabi-v7a’写在了错误的地方
解决方式:有两个externalNativeBuild,写在有cppFlags的那个exterlnativeBuild里面。
Android Studio配置OpenCV中遇到的问题以及解决_第2张图片

二、遇到的第二个问题

java.lang.UnsatisfiedLinkError: dlopen failed: library “libc++_shared.so” not found
问题:没有这个libc++_shared.so库
解决方式:在build.gradle中加入如下两句话,即可以进行远程下载
Android Studio配置OpenCV中遇到的问题以及解决_第3张图片
配置过程中最容易出现问题就是build.gradle配置,现附上build.gradle
plugins {
id ‘com.android.application’
}

android {
compileSdk 32

defaultConfig {
    applicationId "com.example.facedetectionopencv"
    minSdk 21
    targetSdk 32
    versionCode 1
    versionName "1.0"

    testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    externalNativeBuild {
        cmake {
            //cppFlags ''
            abiFilters 'armeabi-v7a'
            //远程下载
            arguments "-DANDROID_STL=c++_shared"
            cppFlags "-std=c++11 -Wno-nonportable-include-path -Wno-deprecated-register -Wno-writable-strings"
        }
    }
    ndk{
        abiFilters 'armeabi-v7a'
    }
}
externalNativeBuild {
    cmake {
        path file('src/main/cpp/CMakeLists.txt')
        version '3.18.1'
    }
}
sourceSets{
    main {
        jniLibs.srcDirs=['src/main/cpp/libs']
    }
}

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



buildFeatures {
    viewBinding true
}

}

dependencies {

implementation 'androidx.appcompat:appcompat:1.3.0'
implementation 'com.google.android.material:material:1.4.0'
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'

}

另再附上CMakeLists.txt配置:

cmake_minimum_required(VERSION 3.18.1)

Declares and names the project.

project(“facedetectionopencv”)

include_directories(include)

set(CMAKE_CXX_FLAGS “ C M A K E C X X F L A G S − L {CMAKE_CXX_FLAGS} -L CMAKECXXFLAGSL{CMAKE_SOURCE_DIR}/libs/${ANDROID_ABI}”)

add_library( # Sets the name of the library.
facedetectionopencv
SHARED
native-lib.cpp)

find_library(
log-lib
log)

target_link_libraries( # Specifies the target library.
facedetectionopencv
${log-lib}
opencv_java4)

其中set(CMAKE_CXX_FLAGS " C M A K E C X X F L A G S − L {CMAKE_CXX_FLAGS} -L CMAKECXXFLAGSL{CMAKE_SOURCE_DIR}/libs/ A N D R O I D A B I " ) 是 环 境 变 量 设 置 , 想 查 看 下 {ANDROID_ABI}")是环境变量设置,想查看下 ANDROIDABI"){CMAKE_CXX_FLAGS} ${CMAKE_SOURCE_DIR} A N D R O I D A B I 具 体 表 示 什 么 , 可 以 在 其 中 打 印 出 来 : m e s s a g e ( − − − − − − − − − − − − − − ) m e s s a g e ( {ANDROID_ABI} 具体表示什么,可以在其中打印出来: message(--------------) message( ANDROIDABImessage()message({CMAKE_SOURCE_DIR})
Android Studio配置OpenCV中遇到的问题以及解决_第4张图片

总结

Android Studio配置好OpenCV,解决好其中遇到的问题,就可以使用opencv啦,可以利用opencv进行图像处理以及脸部检测。下一篇将写怎样利用opencv进行人脸检测。

你可能感兴趣的:(android,studio,opencv,c++)