OpenCV - Android Studio 中集成Opencv环境(不包含opencv_contrib部分)
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部分)的更多相关文章
- OpenCV - Android Studio 中集成Opencv环境(包含opencv_contrib部分)
我在上一篇博客中说到了在Android中集成OpenCV,但是那个版本的OpenCV是没有SIFT和SURF算法的,因为这些算法是受专利保护的,所以并没有被包含在预编译库中,所以如果想要使用SIFT和 ...
- 在android studio中集成javah, ndk-build进行JNI开发
最近在搞一个android上控制LED灯闪烁的功能,用到了串口编程,搜索了一下,发现Google发布了一个demo,android-serialport-api.有现成的代码和APK,要想自己改JNI ...
- 关于Android Studio中使用jni进行opencv配置开发环境的要素秘诀
使用jni进行opencv开发可以快速地将PC端的opencv代码移植到手机上,但是如何在android studio下进行配置,网上几乎找不到教程,大多都是eclipse下使用mk文件的方法,找不到 ...
- Android Studio中配置及使用OpenCV示例
Android Studio配置及使用OpenCV 前言:最近在做项目移植,项目较大,在Eclipse中配置的Jni及OpenCV环境没任何问题,但是迁移到Studio中就问题一大堆,网上也找了一些资 ...
- 在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. ...
- OpenCV - Android Studio 2.2 中利用CAMKE进行OpenCV的NDK开发
我在http://www.cnblogs.com/fx-blog/p/8206737.html一文中提到了如何在Android Studio中Java层导入OpenCV(包含opencv_contri ...
- OpenCV3.4.1快速集成到Android studio中,10分钟搞定
OpenCV3.4.1快速集成到Android studio中,10分钟搞定 转载 https://blog.csdn.net/yu540135101/article/details/8259 ...
- Android Studio中通过CMake使用NDK并编译自定义库和添加预编译库
Note:这篇文章是基于Android Studio 3.01版本的,NDK是R16. step1:创建一个包含C++的项目 其他默认就可以了. C++ Standard 指定编译库的环境,其中Too ...
- Android studio中正确引入so文件的方法
相信很多朋友在使用Android studio开发中,遇到过如何引入第三方so文件的问题,然而第三方官方仅仅给出了ADT环境下的集成方式. Android studio中默认使用的是gradle编译方 ...
随机推荐
- vue构建完整项目-以及实现
简介 由于开发vue项目的时候,需要重新搭建项目的架子,比较麻烦,其实之前做过的项目好多都可以直接拿过来用,比如接下来的这个项目,就可以满足平常的vue单页面开发. 该项目包括了: 全局配置axios ...
- ASP.NET动态网站制作(16)-- SQL数据库(2)
前言:SQL数据库的第二节课,继续讲解基本的语句及用法. 内容: 1.insert插入语句 insert into Book(bookName,bookPrice,bookAuthor) value ...
- Intellij idea subversion checkout error
Subversion 1.8 and IntelliJ IDEA 13 Unlike its earlier versions, Subversion 1.8 support uses the nat ...
- lumen手记:自定义Validate表单验证
版权声明:本文为博主原创文章,未经博主允许不得转载. 今天开始跳lumen的表单验证Validate类的坑,确实好坑!!! 首先,lumen的表单验证返回是无状态的json格式api,这... 所有开 ...
- vue-cli (vue脚手架)
vue-cli(脚手架):它可以自动生成目录 1.在网速不佳的情况下可以安装cnpm(淘宝镜像)如果网速快可以不用安装cnpm直接进行下一步操作 第一步:在命令行执行(全局安装cnpm) npm in ...
- 九度OJ 1351:数组中只出现一次的数字 (位运算)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:3098 解决:906 题目描述: 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 输入: 每个 ...
- spring boot mysql和mybatis
1 选择mysql驱动 <dependency> <groupId>mysql</groupId> <artifactId>mysql-connecto ...
- The Princess and the Pea,摘自iOS应用Snow White and more stories
Once upon a time there was a prince who wanted to marry a real princess.从前,有个王子想和真正的公主结婚. He looked ...
- 搜索ABAP程序代码中的字符串
标准程序名:RPR_ABAP_SOURCE_SCAN /BEV1/NERM07DOCS
- full_case parallel_case学习心得
一般情况下,DC把case语句综合成选择器电路,但也可能把case语句综合成优先权译码电路.有时,优先权译码电路是不必要的,这是可以使用“// synopsys parallel_case”引导语句强 ...