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);
6 回答
以下在Android Studio中使用Android OpenCV sdk的步骤 . 这是这个(1)SO答案的简化版本 .
Download 最新的OpenCV sdk for Android从OpenCV.org并解压缩该zip文件 .
Import OpenCV to Android Studio ,从文件 - >新建 - >导入模块,在解压缩的opencv存档中选择sdk / java文件夹 .
Update build.gradle 在导入的OpenCV模块下更新4个字段以匹配您的项目build.gradle a)compileSdkVersion b)buildToolsVersion c)minSdkVersion和d)targetSdkVersion .
Add module dependency 按应用程序 - >模块设置,然后选择依赖关系选项卡 . 单击底部的图标,选择Module Dependency,然后选择导入的OpenCV模块 .
对于Android Studio v1.2.2,要访问模块设置:在项目视图中,右键单击从属模块 - >打开模块设置
在app / src / main下的Android Studio下的sdk / native下的
Copy libs 文件夹 .
在Android Studio中, rename the copied libs directory to jniLibs ,我们完成了 .
步骤(6)是因为Android工作室需要
app/src/main/jniLibs
中的本机库而不是旧的libs
文件夹 . 对于Android OpenCV新手,请不要错过以下步骤include
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较新版本不同步 .
Integrating OpenCV v3.1.0 into Android Studio v1.4.1 ,包含其他详细信息的说明以及这是您应该获取的类型截图 .
大部分功劳归功于Kiran,Kool,1“和SteveLiles在opencv.org上的解释 . 我正在添加这个答案,因为我相信Android Studio的界面现在足够稳定,能够处理这种类型的集成我还要为我们的项目写这些说明 .
经验丰富的A.S.开发人员会发现一些这种迂腐 . 此答案针对Android Studio中经验有限的人员 .
使用项目向导创建一个新的Android Studio项目(菜单:/ File / New Project):
称之为“cvtest1”
外形:API 19,Android 4.4(KitKat)
名为MainActivity的空白活动
您应该有一个存储此项目的cvtest1目录 . (Android studio的 Headers 栏显示了打开项目时cvtest1的位置)
验证您的应用是否正常运行 . 尝试更改类似“Hello World”文本的内容,以确认构建/测试周期适合您 . (我正在使用API 19设备的模拟器进行测试) .
下载适用于Android v3.1.0的OpenCV软件包,并将其解压缩到某个临时目录中 . (确保它是专门用于Android的软件包,而不仅仅是OpenCV for Java软件包 . )我将这个目录称为“unzip-dir”在unzip-dir下面你应该有一个sdk / native / libs目录,其子目录以像arm ...,mips ......和x86 ......(每种类型的"architecture" Android运行一个)
从Android Studio将OpenCV导入项目作为模块:菜单:/ File / New / Import_Module:
源目录: / 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作为模块依赖项 . 当您选择Add / Module_Dependency时,它应该出现在您可以添加的模块列表中 . 它现在将显示为依赖项,但您将在事件日志中获得更多not not-find-android-14错误 .
查看app模块的build.gradle文件 . 有多个build.gradle文件在Android项目中 . 你想要的是在cvtest1 / app目录中,从项目视图看起来就像build.gradle(Module:app) . 请注意这四个字段的值:
compileSDKVersion(我说23)
buildToolsVersion(我说23.0.2)
minSdkVersion(我说19)
targetSdkVersion(我说23)
您的项目现在有一个cvtest1 / OpenCVLibrary310目录,但从项目视图中看不到:
使用其他工具,例如任何文件管理器,然后转到此目录 . 您还可以将项目视图从Android切换到Project Files,您可以找到此目录,如此屏幕截图所示:
里面有另一个build.gradle文件(在上面的截图中突出显示) . 使用步骤6中的四个值更新此文件 .
此时,模块应该在项目层次结构中显示为 openCVLibrary310 ,就像 app 一样 . (请注意,在我从项目视图切换回Android视图的那个小下拉菜单中) . 您还应该在"Gradle Scripts"下看到一个额外的build.gradle文件,但我发现Android Studio界面有点毛躁,有时它不会立即执行此操作 . 因此,尝试重新同步,清理甚至重新启动Android Studio .
你应该在这个截图中看到带有java下所有OpenCV函数的openCVLibrary310模块:
然后运行您的应用程序您应该在Android监视器中看到这样的行:
(我不知道为什么那行包含错误消息)
将此代码放在上一步的代码下方,并将其更改为与您自己的文件/目录相匹配 .
Gotchas :
如果将目标平台降低到KitKat以下,某些OpenCV库将不再起作用,特别是与org.opencv.android.Camera2Renderer和其他相关类相关的类 . 您可以通过简单地删除apprpriate OpenCV .java文件来解决这个问题 .
如果将目标平台提升到Lollipop或更高版本,我加载文件的示例可能无效,因为使用绝对文件路径是不受欢迎的 . 因此,您可能需要更改示例以从库或其他位置加载文件 . 周围有很多例子 .
对于那些觉得他们想要逃脱所有步骤和屏幕截图(好!)以上答案的人来说,这对我有用
android studio 2.2.1
:创建一个新项目,根据需要命名并采用默认值(minSdkVersion 15很好) .
从这里下载zip文件:https://sourceforge.net/projects/opencvlibrary/files/opencv-android/(我下载了3.1.0版本,但可能有更新的版本) .
解压缩zip文件,最好的位置在工作区文件夹中,但这并不重要 .
在
Android Studio
内,单击File->New-> Import Module
并导航到\path_to_your_unzipped_file\OpenCV-android-sdk\sdk\java
并单击“确定”,然后接受所有默认对话框 .在
app
模块的gradle
文件中,将其添加到依赖项块:XYZ是您下载的确切版本,例如在我的情况下:
任何在创建jniLibs cpp时遇到问题的人都会显示..只是添加ndk ..
Opencv integration with android studio
那些想要拥有相同的YouTube视频的人,尝试使用最新版本的opencv(3.4.0),我的运气不足以显示版本(2.4.9)(opencv releases) .
您还可以将此库添加到build.gradle中