找不到名称为“默认”的配置
怎么了?
我将Android Studio 1.0与gradle 2.2.1结合使用。
#1 楼
在Android Studio中使用Android OpenCV sdk的以下步骤。这是此(1)SO答案的简化版本。从OpenCV.org下载最新的Android版OpenCV sdk并解压缩zip文件。
将OpenCV导入Android Studio,从文件->新建->导入模块,在解压缩的opencv存档中选择sdk / java文件夹。
更新导入的OpenCV模块下的build.gradle以更新4个字段以匹配您的项目build.gradle a)compileSdkVersion b)buildToolsVersion c)minSdkVersion和d)targetSdkVersion。
通过“应用程序”->“模块设置”添加模块依赖性,然后选择“依赖性”选项卡。点击底部的+图标,选择Module Dependency,然后选择导入的OpenCV模块。
对于Android Studio v1.2.2,在项目视图中访问Module Settings:
,右键单击相关模块
->打开模块设置
将sdk / native下的libs文件夹复制到app / src / main下的Android Studio。
在Android Studio中,将复制的libs目录重命名为jniLibs,我们完成了。
步骤(6)是因为Android Studio希望在
app/src/main/jniLibs
中使用本机lib,而不是在较旧的libs
文件夹中。对于那些刚接触Android OpenCV的用户,请不要错过以下步骤包括
static{ System.loadLibrary("opencv_java"); }
(注意:对于OpenCV版本3,您应改为加载库opencv_java3
。)对于步骤(5),如果忽略任何平台库(如x86),请确保您的设备/仿真器不在该平台上。
OpenCV是用C / C ++编写的。 Java包装器是
Android OpenCV SDK-OpenCV.org维护的Android Java包装器。我建议使用这个。
OpenCV Java-OpenCV.org维护自动生成的桌面Java包装器。
JavaCV-由独立开发人员维护的流行Java包装器。不是特定于Android的。该库可能与OpenCV较新版本不同步。
评论
我在执行第二步后遇到错误,请问我删除javadocs目录吗?尽管我将目标定位为支持android sdk 15的设备,但它也要求我安装android sdk 14
–浪漫电子
15年1月14日在5:34
@RomanticElectron希望您已经从链接sourceforge.net/projects/opencvlibrary/files/opencv-android/下载了OpenCV4Android 2.4.10,而不是该Java桌面版本?
–基兰
15年1月21日在6:36
好的,我明白了,我以为您在谈论Android Open CV SDK随附的目录时,我在谈论系统上的sdk安装目录。确定已完成第6步。在哪里包括static {System.loadLibrary(“ opencv_java “); }?
–浪漫电子
15年1月21日在9:09
@RomanticElectron,您在哪里包含静态{System.loadLibrary(“ opencv_java”); }?您说“谢谢我”,但两者之间似乎没有任何消息。然后,您说不需要。您能再解释一下吗?谢谢。
– puntofisso
15年8月18日在16:45
对于在步骤2中导入模块后出现android-14错误的任何人,您都需要在项目的openCV目录中手动编辑build.gradle,如步骤3所示。
–天堂
15年11月21日在16:37
#2 楼
将OpenCV v3.1.0集成到Android Studio v1.4.1中,并附带说明和更多详细信息以及这是您应该得到的类型屏幕截图。大部分功劳归功于Kiran,Kool,1 “,以及SteveLiles在opencv.org上的解释。我添加此答案是因为我相信Android Studio的界面现在已经足够稳定,可以使用这种类型的集成产品。此外,无论如何,我都必须为我们编写这些说明项目。
经验丰富的AS开发人员会发现其中一些有趣的知识,此答案针对的是在Android Studio中经验有限的人。
创建使用项目向导(菜单:/ File / New Project)新建一个Android Studio项目:
将其命名为“ cvtest1”
外形尺寸:API 19,Android 4.4(KitKat) )
名为MainActivity的空白活动
您应该有一个cvtest1目录存储该项目。(Android studio的标题栏显示cvtest1所在的位置哟您打开项目)。
验证您的应用程序运行正常。尝试更改诸如“ Hello World”文本之类的内容,以确认构建/测试周期适合您。 (我正在使用API 19设备的仿真器进行测试)。
下载适用于Android v3.1.0的OpenCV软件包,并将其解压缩到某个地方的某个临时目录中。 (确保它是专用于Android的软件包,而不仅仅是Java的OpenCV软件包。)我将这个目录称为“ unzip-dir”,在unzip-dir下,您应该有一个sdk / native / libs目录,其子目录以诸如arm ...,mips ...和x86 ...之类的东西(运行Android的每种“架构”类型之一)
从Android Studio中将OpenCV作为模块导入到您的项目中:
菜单:/ File / New / Import_Module:
源目录:{unzip-dir} / sdk / java
模块名称:Android Studio会自动使用openCVLibrary310填写此字段(确切的名称可能无关紧要,但是我们会使用它)。
单击下一步。您将看到一个包含三个复选框的屏幕,以及有关jar,库和导入选项的问题。应检查所有三个。单击Finish。
Android Studio开始导入模块,并且会显示一个import-summary.txt文件,其中包含未导入内容的列表(主要是javadoc文件)和其他信息。
但是,您还会收到一条错误消息,提示无法找到哈希字符串为'android-14'的目标...。发生这种情况是因为OpenCV zip文件中的build.gradle文件您下载的代码说可以使用android API版本14进行编译,
默认情况下您没有使用Android Studio v1.4.1。进行编译。
>打开项目结构对话框(菜单:/ File / Project_Structure)。选择“ app”模块,单击“ Dependencies”选项卡,然后添加:openCVLibrary310作为Module Dependency。当您选择Add / Module_Dependency时,它应该出现在您可以添加的模块列表中。
它现在将显示为依赖项,但在事件日志中还会出现一些无法找到的android-14错误。
查找您的应用模块的build.gradle文件。一个Android项目中有多个build.gradle文件。所需的一个位于cvtest1 / app目录中,从项目视图中看起来像build.gradle(模块:app)。请注意这四个字段的值:
compileSDKVersion(我的说是23)
minSdkVersion(我的说是19)
targetSdkVersion(我说23)
您的项目现在具有cvtest1 / OpenCVLibrary310目录,但在项目视图中不可见:
使用其他工具,例如任何文件管理器,然后转到此目录。您还可以将项目视图从Android切换到Project Files,然后可以找到此目录,如以下屏幕快照所示:
里面还有另一个build.gradle文件(在以上屏幕截图)。使用步骤6中的四个值更新此文件。
重新同步项目,然后清理/重建它。 (菜单:/ Build / Clean_Project)它应该可以清洁和构建而不会出现错误
,并且应该在0:Messages屏幕中看到很多对:openCVLibrary310的引用。 />此时,该模块应在项目层次结构中显示为openCVLibrary310,就像app一样。 (请注意,在这个小的下拉菜单中,我从Project View切换回了Android View)。您还应该在“ Gradle Scripts”下看到一个附加的build.gradle文件,但是我发现Android Studio界面有点小故障,有时它不能立即执行此操作。因此,尝试重新同步,清理甚至重新启动Android Studio。
您应该在Java下看到带有所有OpenCV功能的openCVLibrary310模块,如以下屏幕截图所示:
将{unzip-dir} / sdk / native / libs目录(及其下的所有内容)复制到您的Android项目,复制到cvtest1 / OpenCVLibrary310 / src / main /,然后重命名您的副本
从库到jniLib。现在,您应该有一个cvtest1 / OpenCVLibrary310 / src / main / jniLibs目录。重新同步您的项目,该目录现在应该
出现在openCVLibrary310下的项目视图中。
转到MainActivity.java的onCreate方法并附加以下代码:
if (!OpenCVLoader.initDebug()) {
Log.e(this.getClass().getSimpleName(), " OpenCVLoader.initDebug(), not working.");
} else {
Log.d(this.getClass().getSimpleName(), " OpenCVLoader.initDebug(), working.");
}
然后运行您的应用程序。您应该在Android Monitor中看到这样的行:
(我不知道为什么那行显示错误消息)
现在尝试实际使用一些openCV代码。在下面的示例中,我将一个.jpg文件复制到了android仿真器上cvtest1应用程序的缓存目录中。下面的代码加载该图像,运行canny边缘检测算法,然后将结果写回到同一目录中的.png文件。
将此代码放在上一步代码的下面,并对其进行更改以匹配您自己的文件/目录。
String inputFileName="simm_01";
String inputExtension = "jpg";
String inputDir = getCacheDir().getAbsolutePath(); // use the cache directory for i/o
String outputDir = getCacheDir().getAbsolutePath();
String outputExtension = "png";
String inputFilePath = inputDir + File.separator + inputFileName + "." + inputExtension;
Log.d (this.getClass().getSimpleName(), "loading " + inputFilePath + "...");
Mat image = Imgcodecs.imread(inputFilePath);
Log.d (this.getClass().getSimpleName(), "width of " + inputFileName + ": " + image.width());
// if width is 0 then it did not read your image.
// for the canny edge detection algorithm, play with these to see different results
int threshold1 = 70;
int threshold2 = 100;
Mat im_canny = new Mat(); // you have to initialize output image before giving it to the Canny method
Imgproc.Canny(image, im_canny, threshold1, threshold2);
String cannyFilename = outputDir + File.separator + inputFileName + "_canny-" + threshold1 + "-" + threshold2 + "." + outputExtension;
Log.d (this.getClass().getSimpleName(), "Writing " + cannyFilename);
Imgcodecs.imwrite(cannyFilename, im_canny);
运行您的应用程序。您的仿真器应创建一个黑白的“边缘”图像。您可以使用Android设备监视器
检索输出或编写活动以显示输出。
问题:
如果降低您的KitKat下面的目标平台将不再运行某些OpenCV库,特别是与org.opencv.android.Camera2Renderer相关的类以及其他相关类。您可能可以通过简单地删除适当的OpenCV .java文件来解决此问题。因此,您可能必须更改示例以从图库或其他地方加载文件。周围有很多例子。
评论
2月16日编辑:jniLibs现在位于openCVLibrary310目录中,而不是主应用程序目录中。两种方法都可以,但是对我来说,将它们保留在opencv部分似乎更干净。加上更多屏幕截图和“ Gotchas”部分。
– ssimm
16-2-16在12:33
我认为缺少一些导入语句,否则效果很好! +1
–艾伦·诺加德(AllanNørgaard)
16 Mar 9 '16 at 15:20
我听了你的回答,但失败了。 1i收到错误OpenCV错误:无法加载OpenCV 2的信息库java.lang.UnsatisfiedLinkError:dalvik.system.PathClassLoader [DexPathList [[zip文件“ /data/app/www.deven.com.opencv-2/base.apk “],nativeLibraryDirectories = [/ vendor / lib,/ system / lib]]]找不到” libopencv_java3.so。关于这些错误,我在编写时逐步进行了哪些操作。
–德文德拉·辛格(Devendra Singh)
16-3-16在7:04
@DevendraSingh我遇到了与您相同的错误,但我意识到我错过了第9步。
–aaaa
16年4月13日在14:05
如果我们想在Android Studio上用C ++为opencv编码怎么办?
–user8663682
18年1月23日在12:51
#3 楼
对于每个想摆脱上面答案(所有问题)中所有步骤和屏幕截图的人,这对我来说非常有用android studio 2.2.1
:创建一个新项目,名称可以根据需要使用它,并使用默认值(minSdkVersion 15很好)。
从此处下载zip文件:https://sourceforge.net/projects/opencvlibrary/files/opencv- android /(我下载了3.2.0版本,但是可能有更新的版本)。
解压缩zip文件,最好的位置是您的工作区文件夹中,但这并不重要。
在
Android Studio
内,单击File->New-> Import Module
并导航到\path_to_your_unzipped_file\OpenCV-android-sdk\sdk\java
,然后单击“确定”,然后接受所有默认对话框。在您的
gradle
文件中app
模块,将其添加到依赖项块: dependencies {
compile project(':openCVLibraryXYZ')
//rest of code
}
其中XYZ是您下载的确切版本,例如在我的情况下:
dependencies {
compile project(':openCVLibrary320')
//rest of code
}
评论
不错,很简单,thnx ;-)也适用于版本3.2.0。
–黑花
17 Mar 22 '17 at 18:24
谢谢,这确实是更简单的解决方案。我的一点。无法编译新的OpenCV模块。这里的答案帮助我解决了这个问题stackoverflow.com/a/40302788/408780
–提马
17年3月31日下午14:58
只需添加@blacharnia所说的内容,只需确保在通讯座依赖项部分中使用“ compile project(':openCVLibrary320')”即可,而不是310
–亚伯拉罕·菲利普(Abraham Philip)
17年5月19日在0:15
也许更一般而言,要添加到上面的注释中,请使用“ compile project(':openCVLibraryXYZ')”,其中XYZ是不带“点”的openCV Android SDK的版本号-现在也适用于3.4.0版本->即使用“编译项目(':openCVLibrary340')”
–米克
18年1月16日在19:42
@Mick谢谢,我根据您的建议编辑了答案。
– yshahak
18年1月17日在13:59
#4 楼
Android Studio 3.4 + OpenCV 4.1从此处下载最新的OpenCV zip文件(当前最新版本为4.1.0),并将其解压缩到您的工作区或另一个文件夹中。
正常创建新的Android Studio项目。单击
File->New->Import Module
,导航到/path_to_unzipped_files/OpenCV-android-sdk/sdk/java
,将模块名称设置为opencv
,单击Next
并取消选中屏幕中的所有选项。启用
Project
文件查看模式(默认模式为Android
)。在opencv/build.gradle
文件中,将apply plugin: 'com.android.application'
更改为apply plugin: 'com.android.library'
,然后将application ID "org.opencv"
替换为minSdkVersion 21
targetSdkVersion 28
(根据
app/build.gradle
中的值)。使用Gradle文件同步项目。将此字符串添加到
app/build.gradle
文件中的依赖项块中dependencies {
...
implementation project(path: ':opencv')
...
}
再次选择
Android
文件查看模式。右键单击app
模块,然后转到New->Folder->JNI Folder
。选择更改文件夹位置并设置src/main/jniLibs/
。再次选择Project
文件查看模式,并将所有文件夹从/path_to_unzipped_files/OpenCV-android-sdk/sdk/native/libs
复制到app/src/main/jniLibs
。再次以Android
文件查看模式右键单击app
模块,然后选择Link C++ Project with Gradle
。选择构建系统ndk-build
并选择OpenCV.mk
文件的路径/path_to_unzipped_files/OpenCV-android-sdk/sdk/native/jni/OpenCV.mk
。path_to_unzipped_files
不能包含任何空格,否则会出现错误!要检查OpenCV初始化,请添加Toast MainActivity
onCreate()
方法中的消息:Toast.makeText(MainActivity.this, String.valueOf(OpenCVLoader.initDebug()), Toast.LENGTH_LONG).show();
如果初始化成功,您将在Toast消息中看到
true
,否则您将看到false
。评论
上面您说过“用.....替换应用程序ID” org.opencv”,但在“ with”之后没有任何内容。你能澄清一下吗?您是说“删除applicationId条目并添加两个条目,如下所示”:
–戴尔
19-09-19在18:51
@Dale是的,您应该使用两个字符串替换应用程序ID“ org.opencv”字符串:minSdkVersion 21和targetSdkVersion 28(根据app / build.gradle文件中的值)
– Plo_Koon
19-09-20在19:51
我遵循了您描述的所有步骤。但是出现错误E / art:dlopen(“ / data / app / com.example.objectsegmentation-1 / lib / arm64 / libopencv_java4.so”,RTLD_LAZY)失败:dlopen失败:找不到库“ libc ++ _ shared.so”
–马森(Masthan)
1月7日6:40
#5 楼
这对我有用,就像添加gradle依赖一样容易:https://bintray.com/seesaa/maven/opencv#
https://github.com com / seesaa / opencv-android
一个警告是我必须使用硬件调试设备,因为手臂仿真器对我来说运行太慢(正如AVD Manager所说的那样),并且,如上所述在回购自述文件中,此版本不包括x86或x86_64支持。
似乎可以构建并建议测试:
static {
OpenCVLoader.initDebug();
}
吐出一堆看起来对我来说正确的输出。 >
评论
这是来自android studio中的一个新项目。我没有导入任何东西,也没有下载任何东西,等等。只需添加gradle依赖项并进行同步即可。
– Naumdev
18/12/27在16:23
#6 楼
在您的build.gradlerepositories {
jcenter()
}
implementation 'com.quickbirdstudios:opencv:4.1.0'
更多信息
#7 楼
Download
从https://github.com/opencv/opencv/releases获取最新的Android预制OpenCV版本并解压缩(例如,opencv-4.4.0-android-sdk.zip)。
创建一个空的Android Studio项目
Open Android Studio. Start a new project.
保留默认目标设置。
使用“空活动”模板。将活动命名为MainActivity并具有相应的布局activity_main。
插入设备并运行项目。在继续下一步之前,它应该已成功安装并启动。
转到File-> New-> Import module
,并提供指向unpacked_OpenCV_package / sdk / java的路径。模块名称将自动检测。禁用Android Studio在下一个窗口中会建议您的所有功能。
配置库build.gradle(openCVLibrary build.gradle)
Add OpenCV dependency
实现库到项目(应用程序build.gradle)
apply plugin: 'com.android.library'
android {
compileSdkVersion 28
buildToolsVersion "28.0.3"
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
}
评论
现在,我们可以使用Android Studio导入模块,并且步骤可能更加简单。你能试试这个stackoverflow.com/a/27356635/1180117谢谢,它有效。将其写为答案,然后我可以接受。
@BartoszBialecki @Kiran,我已经按照步骤4进行操作了,我无法在sdk目录下找到本机目录。我丢失了什么吗?
@RomanticElectron,您必须从OpenCV库的sdk中添加natvie目录,而不是Android sdk。
@BartoszBialecki谢谢