OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,支持的运行环境也是非常的多,这篇文章主要讲的是Android环境集成OpenCV(IDE是Android Studio,我想Eclipse应该可以抛弃了哈~)。

  当然,通过本文所讲集成OpenCV之后,SIFT/SURF/FREAK等算法是不可以用的,这是因为OpenCV3之后,OpenCV将其转移到了opencv_contrib部分,需要我们将opencv_contrib编译进入之后再进行集成,这个在之后的文章里在说(这个还是两个月前搞的,部分情节可能记得不是很清楚,欢迎大神指出)。

首先要做好的是准备工作:

  Android Studio:安装教程网上有很多

  OpenCV for Android:https://opencv.org/releases.html

  Opencv for Android库下载解压之后得到:

    

  文档结构说明:

  • apk目录里面放的是OpenCV Manager的安装文件,是不同CPU版本要选择不同apk安装文件,这种方式调用OpenCV需要用户自己安装OpenCV Manager,带来的用户体验很差,我们希望App自身能够默认安装OpenCV Manager,这篇文章将会告诉你如何做;
  • doc目录里面放的是相关文档与OpenCV的LOGO;
  • samples目录里面放的是OpenCV4Android的演示代码,大家可以参考一下;
  • sdk目录里面放的就是我们需要集成到Android Studio中的项目上去的东西,很重要。

接下来就是正式的集成了集成步骤了:

  在Android Studio中创建一个Androd项目,进入项目之后,选择:File->New->Import Module

    

    

  选择刚刚解压得到的OpenCV库路径下sdk->java,得到结果如下(显示感叹号的原因是因为我已经导入过了):

    

  一次点击下一步,导入成功后,可以看见:

    

  然后需要添加依赖,点击File->Project Structure,点击Module下App,选择Dependencies:

    

  添加依赖之后,就可以在项目中引用OpenCV相关API代码了,如果你此刻运行App,它就会提示你安装OpenCV Manager。这对于我们来说不算集成成功,因为自己的APP就无法独立安装,必须依赖OpenCV Manager这个apk文件才可以运行。

接下来说如何解决该问题:

  首先OpenCVLibrary的build.gradle文件中的一下参数修改为与app的build.gradle文件中相同(红框标出的部分为需要修改的部分):

    

  然后将下载解压得到的OpenCV4Android库目录下的sdk->native->libs中的文件全部拷贝到项目的lib目录下:

    

  然后在app的gradle文件中添加(红框标出部分为本次添加内容):

    

  gradle的完整代码如下:

 apply plugin: 'com.android.application'

 android {
compileSdkVersion 25
buildToolsVersion "27.0.1"
defaultConfig {
applicationId "com.example.easysilkver01"
minSdkVersion 15
targetSdkVersion 25
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
} useLibrary 'org.apache.http.legacy' buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
} dependencies {
compile 'com.android.support:design:25.3.1'
compile fileTree(include: ['*.jar'], dir: 'libs')
compile fileTree(dir: "$buildDir/native-libs", include: 'native-libs.jar')
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:25.3.1'
testCompile 'junit:junit:4.12'
compile project(':openCVLibrary320')
} task nativeLibsToJar(type: Jar, description: 'create a jar archive of the native libs') {
destinationDir file("$buildDir/native-libs")
baseName 'native-libs'
from fileTree(dir: 'libs', include: '**/*.so')
into 'lib/'
} tasks.withType(JavaCompile) {
compileTask -> compileTask.dependsOn(nativeLibsToJar)
}

  至此,Android中OpenCV(不包含nonfree部分)就完全配置好啦,这样既避免了NDK繁琐又不用依赖OpenCV Manager第三方APP,你的APP就可以直接使用OpenCV了。需要注意的是:此配置方式OpenCV加载必须通过静态加载方式。

最后:

  代码demo就不贴了,网上帖子多的很,贴一下导入OpenCV库的加载方法吧:

     /**
* 导入OpenCV库
*/
private void initLoadOpenCVLibs() {
boolean success = OpenCVLoader.initDebug();
if (success) {
Log.d(TAG, "initLoadOpenCVLibs:OpenCV加载成功!");
} else {
Log.d(TAG, "initLoadOpenCVLibs:OpenCV加载失败!");
}
}

  最后,感谢http://blog.csdn.net/jia20003/article/details/53126321#reply的文章,帮我当初解决了这个问题,但是他的文章中配置过程有一个地方说的有问题,所以当时我也是捣鼓了蛮久,幸运的是这篇文章中我已经纠正过来啦。

OpenCV - Android Studio 中集成Opencv环境(不包含opencv_contrib部分)的更多相关文章

  1. OpenCV - Android Studio 中集成Opencv环境(包含opencv_contrib部分)

    我在上一篇博客中说到了在Android中集成OpenCV,但是那个版本的OpenCV是没有SIFT和SURF算法的,因为这些算法是受专利保护的,所以并没有被包含在预编译库中,所以如果想要使用SIFT和 ...

  2. 在android studio中集成javah, ndk-build进行JNI开发

    最近在搞一个android上控制LED灯闪烁的功能,用到了串口编程,搜索了一下,发现Google发布了一个demo,android-serialport-api.有现成的代码和APK,要想自己改JNI ...

  3. 关于Android Studio中使用jni进行opencv配置开发环境的要素秘诀

    使用jni进行opencv开发可以快速地将PC端的opencv代码移植到手机上,但是如何在android studio下进行配置,网上几乎找不到教程,大多都是eclipse下使用mk文件的方法,找不到 ...

  4. Android Studio中配置及使用OpenCV示例

    Android Studio配置及使用OpenCV 前言:最近在做项目移植,项目较大,在Eclipse中配置的Jni及OpenCV环境没任何问题,但是迁移到Studio中就问题一大堆,网上也找了一些资 ...

  5. 在Android Studio上进行OpenCV 3.1开发环境配置

    开发环境: Windows 7 x 64 家庭版 Android Studio 1.5.1(Gradle版本2.8) JDK 1.8.0 Android 6.0(API 23) OpenCV 3.1. ...

  6. OpenCV - Android Studio 2.2 中利用CAMKE进行OpenCV的NDK开发

    我在http://www.cnblogs.com/fx-blog/p/8206737.html一文中提到了如何在Android Studio中Java层导入OpenCV(包含opencv_contri ...

  7. OpenCV3.4.1快速集成到Android studio中,10分钟搞定

    OpenCV3.4.1快速集成到Android studio中,10分钟搞定     转载 https://blog.csdn.net/yu540135101/article/details/8259 ...

  8. Android Studio中通过CMake使用NDK并编译自定义库和添加预编译库

    Note:这篇文章是基于Android Studio 3.01版本的,NDK是R16. step1:创建一个包含C++的项目 其他默认就可以了. C++ Standard 指定编译库的环境,其中Too ...

  9. Android studio中正确引入so文件的方法

    相信很多朋友在使用Android studio开发中,遇到过如何引入第三方so文件的问题,然而第三方官方仅仅给出了ADT环境下的集成方式. Android studio中默认使用的是gradle编译方 ...

随机推荐

  1. lua例子getglobal()

    #include <stdio.h> #define MAX_COLOR 255 extern "C" { #include "lua-5.2.2/src/l ...

  2. STM32F103RCT6移植到STM32F103C8T6注意事项

    1,修改IC为STC32F103C8 2,修改晶振为8.0M 3,修改C/C++宏定义,由STM32F10X_HD,USE_STDPERIPH_DRIVER 改为 STM32F10X_MD,USE_S ...

  3. tomcat6指定的服务为安装

    tomcat6w.exe 运行 提示 指定的服务未安装 unable to open the service 'tomcat6' 新下载的Tomcat6.0.29 解压版,解压缩完成后,双击tomca ...

  4. 【BZOJ2322】[BeiJing2011]梦想封印 高斯消元求线性基+DFS+set

    [BZOJ2322][BeiJing2011]梦想封印 Description 渐渐地,Magic Land上的人们对那座岛屿上的各种现象有了深入的了解. 为了分析一种奇特的称为梦想封印(Fantas ...

  5. PhotoKit详解

    Photokit介绍 这篇主要介绍如何通过 Photokit获取数据 photokit.jpg 1,基类 PHObject Photos 框架中的根类PHObject只有一个公开接口 localIde ...

  6. 算法设计 mac 字符串 标识 n维度 2 3维度 字符串 标识值 特征值

    基向量

  7. 我的Android进阶之旅------>Android 标签的用法

    布局资源文件的根节点可以使用容器控件(如LinearLayout.FrameLayout等),也可以使用非容器控件(如:EditText.TextView等).对于非容器控件,只能在非容器控件标签中放 ...

  8. PAT 1064. 朋友数(20)

    如果两个整数各位数字的和是一样的,则被称为是“朋友数”,而那个公共的和就是它们的“朋友证号”.例如123和51就是朋友数,因为1+2+3 = 5+1 = 6,而6就是它们的朋友证号.给定一些整数,要求 ...

  9. PostgreSQL 里面的 BIGSERIAL

    @Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id; CREATE TABLE article( id BIGS ...

  10. jauery table

    $("#tableData tr:gt(0)").each(function() { }//橘色部分是查找id为tableData的DataTable里面除第一行以外的行