Bar*_*cki 136 android opencv gradle android-studio
我想在Android Studio的应用程序中使用OpenCV库.我按照这里的说明,但我得到错误
未找到名称"default"的配置
有什么不对?
我使用带有gradle 2.2.1的Android Studio 1.0.
Kir*_*ran 303
以下在Android Studio中使用Android OpenCV sdk的步骤.这是这个(1)SO答案的简化版本.
步骤(6)是因为Android工作室需要本机库app/src/main/jniLibs
而不是旧libs
文件夹.对于Android OpenCV新手,请不要错过以下步骤
static{ System.loadLibrary("opencv_java"); }
(注意:对于OpenCV版本3,在此步骤中您应该加载库opencv_java3
.)OpenCV编写的是C/C++.Java包装器是
ssi*_*imm 141
将OpenCV v3.1.0集成到Android Studio v1.4.1中,带有更多详细信息的说明以及这是您应该获取的类型截图.
大部分功劳归功于Kiran,Kool,1"和SteveLiles在opencv.org上的解释.我正在添加这个答案,因为我相信Android Studio的界面现在足够稳定,可以用于这种类型的集成我还要为我们的项目写这些说明.
经验丰富的AS开发人员会发现一些这种迂腐.此答案针对Android Studio中经验有限的人员.
使用项目向导创建一个新的Android Studio项目(菜单:/ File/New Project):
空白活动名为MainActivity
您应该有一个存储此项目的cvtest1目录.(Android工作室的标题栏显示了打开项目时cvtest1的位置)
验证您的应用是否正常运行.尝试更改类似"Hello World"文本的内容,以确认构建/测试周期适合您.(我正在使用API 19设备的模拟器进行测试).
下载适用于Android v3.1.0的OpenCV软件包,并将其解压缩到某个临时目录中.(确保它是专门用于Android的软件包,而不仅仅是OpenCV for Java软件包.)我将这个目录称为" unzip-dir "在unzip-dir下面你应该有一个sdk/native/libs目录,其子目录以像arm ...,mips ......和x86 ......(每个类型的"架构"Android运行一个)
从Android Studio将OpenCV作为模块导入项目:Menu:/ File/New/Import_Module:
点击下一步.您将获得一个包含三个复选框的屏幕以及有关jar,库和导入选项的问题.应检查所有三个.单击" 完成".
Android Studio开始导入模块,您将看到一个import-summary.txt文件,其中包含未导入的内容列表(主要是javadoc文件)和其他信息.
但你也可以得到一个错误信息说没有找到目标与哈希字符串"机器人-14" .......发生这种情况是因为您下载的OpenCV zip文件中的build.gradle文件说使用Android API版本14进行编译,默认情况下您没有使用Android Studio v1.4.1.
打开项目结构对话框(菜单:/ File/Project_Structure).选择"app"模块,单击Dependencies选项卡并添加:openCVLibrary310作为模块依赖项.当您选择Add/Module_Dependency时,它应该出现在您可以添加的模块列表中.它现在将显示为依赖项,但您将在事件日志中获得更多not not-find-android-14错误.
查看app模块的build.gradle文件.Android项目中有多个build.gradle文件.你想要的是在cvtest1/app目录中,从项目视图看起来就像build.gradle(Module:app).请注意以下四个字段的值:
您的项目现在有一个cvtest1/OpenCVLibrary310目录,但从项目视图中看不到它:
使用其他工具,例如任何文件管理器,然后转到此目录.您还可以将项目视图从Android切换到Project Files,您可以找到此目录,如此屏幕截图所示:
里面有另一个build.gradle文件(在上面的截图中突出显示).使用步骤6中的四个值更新此文件.
重新同步项目,然后清理/重建它.(菜单:/ Build/Clean_Project)它应该清理并构建没有错误,你应该在0:Messages屏幕中看到许多引用:openCVLibrary310.
此时,模块应该作为openCVLibrary310出现在项目层次结构中,就像app一样.(注意,在小下拉菜单中我切换回从项目视图到Android设备上查看).您还应该在"Gradle Scripts"下看到一个额外的build.gradle文件,但我发现Android Studio界面有点毛躁,有时它不会立即执行此操作.因此,请尝试重新同步,清理甚至重新启动Android Studio.
您应该在这个截图中看到openCVLibrary310模块,其中包含java下的所有OpenCV函数:
将{unzip-dir}/sdk/native/libs目录(及其下的所有内容)复制到您的Android项目,复制到cvtest1/OpenCVLibrary310/src/main /,然后将您的副本从libs重命名为jniLibs.您现在应该有一个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.");
}
Run Code Online (Sandbox Code Playgroud)
现在尝试实际使用一些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);
Run Code Online (Sandbox Code Playgroud)运行您的应用程序 您的模拟器应创建黑白"边缘"图像.您可以使用Android设备监视器检索输出或编写活动以显示它.
该陷阱:
ysh*_*hak 37
对于那些觉得他们想要逃脱所有步骤和屏幕截图(上面的答案)的人来说,这对我有用android studio 2.2.1
:
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
}
Run Code Online (Sandbox Code Playgroud)XYZ是您下载的确切版本,例如在我的情况下:
dependencies {
compile project(':openCVLibrary320')
//rest of code
}
Run Code Online (Sandbox Code Playgroud)
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
,将Module name设置为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
Run Code Online (Sandbox Code Playgroud)
(根据中的值app/build.gradle
)。用Gradle文件同步项目。
将此字符串添加到app/build.gradle
文件中的依赖项块
dependencies {
...
implementation project(path: ':opencv')
...
}
Run Code Online (Sandbox Code Playgroud)再次选择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初始化,请在MainActivity onCreate()
方法中添加Toast消息:
Toast.makeText(MainActivity.this, String.valueOf(OpenCVLoader.initDebug()), Toast.LENGTH_LONG).show();
Run Code Online (Sandbox Code Playgroud)
如果初始化成功,您将true
在Toast消息中看到,否则将看到false
。
在你的 build.gradle 中
repositories {
jcenter()
}
implementation 'com.quickbirdstudios:opencv:4.1.0'
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
182048 次 |
最近记录: |