在 Android Studio 中找不到 opencv2

Posted

技术标签:

【中文标题】在 Android Studio 中找不到 opencv2【英文标题】:Cannot find opencv2 in Android Studio 【发布时间】:2018-03-12 20:40:37 【问题描述】:

我正在尝试在 android Studio 中编写一个 C++ 文件,我想在我的项目中使用 OpenCV。

但是,当我尝试使用以下包含时,我收到一条错误消息 Cannot Find 'opencv2'

#include <opencv2/core.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv2/features2d.hpp>

要在 Android 中设置 OpenCV,您必须采取以下步骤,found here,才能在 Android Studio 中使用 OpenCV 的 Java 部分。

据我所知,要在 Android Studio 中使用 OpenCV 的 C++ 部分,您必须将 Android.mkApplication.mk 添加到包含本机代码的文件夹中。

我的Android.mk 文件如下所示。

LOCAL_PATH := $(call my-dir)

CVROOT := C:/Users/Dan/Documents/Repos/Android-Studio/Assets/opencv-3.4.1-android-sdk/OpenCV-android-sdk/sdk/native/jni

include $(CLEAR_VARS)
OPENCV_CAMERA_MODULES:=on
OPENCV_INSTALL_MODULES:=on
OPENCV_LIB_TYPE:=SHARED
include $(CVROOT)/OpenCV.mk

LOCAL_MODULE    := app
LOCAL_SRC_FILES := native-lib.cpp
LOCAL_LDLIBS +=  -llog -ldl

include $(BUILD_SHARED_LIBRARY)

我的Application.mk 文件如下所示。

APP_STL := gnustl_static
APP_CPPFLAGS := -frtti -fexceptions
APP_ABI := armeabi-v7a
APP_PLATFORM := android-27

我在设置我的项目以在 Android 上使用 OpenCV 的 C++ 部分时做错了吗?


其他信息是否有所作为

我的项目大纲是这样的。

我的 gradles 如下所示

应用模块

apply plugin: 'com.android.application'

android 
    compileSdkVersion 27
    defaultConfig 
        applicationId "com.test.test.esra"
        minSdkVersion 24
        targetSdkVersion 27
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        externalNativeBuild 
            cmake 
                cppFlags "-frtti -fexceptions"
            
        
    
    buildTypes 
        release 
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        
    
    externalNativeBuild 
        cmake 
            path "CMakeLists.txt"
        
    


dependencies 
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation 'com.android.support:appcompat-v7:27.1.0'
    implementation 'com.android.support.constraint:constraint-layout:1.0.2'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.1'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
    // Room - Managing local databases
    implementation 'android.arch.persistence.room:runtime:1.0.0'
    annotationProcessor "android.arch.persistence.room:compiler:1.0.0"
    //Jetbrains Annotations
    implementation 'org.jetbrains:annotations-java5:15.0'
    implementation project(':openCVLibrary341')

openCVLibrary341 模块

apply plugin: 'com.android.library'

android 
    compileSdkVersion 27

    defaultConfig 
        minSdkVersion 24
        targetSdkVersion 27
    

    buildTypes 
        release 
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        
    

项目 build.gradle

buildscript 

    repositories 
        google()
        jcenter()
    
    dependencies 
        classpath 'com.android.tools.build:gradle:3.0.1'


        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    


allprojects 
    repositories 
        google()
        jcenter()
    


task clean(type: Delete) 
    delete rootProject.buildDir

【问题讨论】:

【参考方案1】:

对于遇到同样问题的其他人来说,问题很容易解决。

您不再需要 .mk 文件,因此可以将其删除。

如果您是从头开始一个项目,请确保您已安装 Android NDK 和 CMake,并为您的项目启用它们。

按照answer 中发布的初始步骤在 Android 上设置 OpenCV 的 Java 部分。您需要更改您的 app module's 构建 gradle 以反映下面的 sn-p。

defaultConfig 
    ...
    externalNativeBuild 
        cmake 
            cppFlags "-frtti -fexceptions"
            abiFilters 'x86', 'x86_64', 'armeabi', 'armeabi-v7a', 'arm64-v8a', 'mips', 'mips64'
        
    

sourceSets 
    main 
        jniLibs.srcDirs = ['src/main/jniLibs']
    

然后你想编辑文件CMakeLists.txt。在此文件中,您希望在 cmake_minimum_required(VERSION X.X.X) 行下方包含以下代码。

此外,您需要将lib_opencv 添加到CMakeLists.txt 底部附近的target_link_libraries。这将有助于防止未定义的引用错误。

include_directories(your-path-to/OpenCV-android-sdk/sdk/native/jni/include)
add_library( lib_opencv SHARED IMPORTED )
set_target_properties(lib_opencv PROPERTIES IMPORTED_LOCATION $CMAKE_CURRENT_SOURCE_DIR/src/main/jniLibs/$ANDROID_ABI/libopencv_java3.so)

...

target_link_libraries( # Specifies the target library.
                   native-lib

                   # OpenCV lib
                   lib_opencv

                   # Links the target library to the log library
                   # included in the NDK.
                   $log-lib )

确保将 your-path-to 替换为 Android 版 OpenCV 的实际路径。

最后,清理您的项目并刷新您链接的 C++ 项目。这将消除错误。

我从这个非常好的GitHub page 获得了这些信息。致于领导


关于您不再需要.mk 文件的说明。这适用于 Android Studio 3。我没有在旧版本的 Android Studio 或 Eclipse 上对此进行测试,因此您可能需要这些 IDE 的 .mk 文件。

【讨论】:

以上是关于在 Android Studio 中找不到 opencv2的主要内容,如果未能解决你的问题,请参考以下文章

为啥在 Visual Studio 2019 (XAMARIN) 中找不到 Android 库

在 Android Studio 中找不到 MainActivity.java [关闭]

在 Android Studio 的插件中找不到 Android Drawable Importer

在 Android Studio 中找不到“填充父级”[重复]

在 Android Studio 中找不到 Open for Editing

在 Android Studio 中找不到 JDBC 类