在 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.mk
和 Application.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 中找不到“填充父级”[重复]