最近这周帮一个大四的学长弄他的毕业设计,他的课题是基于安卓环境下的图片合成问题,本来这个蛮简单的,但是他这个两个图片的合成算法是调用opencv的,,,然后就把我各种煎熬,然后按照网上的各种博客来装opencv库,出现了各种问题,然后就一个一个去解决,,,唉头大。希望我的总结可以给别人带来帮助。
OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。
OpenCV用C++语言编写,它的主要接口也是C++语言,但是依然保留了大量的C语言接口。该库也有大量的Python、Java and MATLAB/OCTAVE(版本2.5)的接口。这些语言的API接口函数可以通过在线文档获得。如今也提供对于C#、Ch、Ruby的支持。
//以上都是百度百科,我去了解了一下这个还蛮厉害的,图片识别,人脸识别,动作追踪等等视觉方面的都很完善,好多都是开源的,java,c++都可以调用。
网上说有好几种方法,我下面就只讲一种的配置过程,亲测可以用的
第一步:在官网下载opencv for android的sdk
官网:https://opencv.org/releases.html
下载好,然后放在文件夹里面
第二步:将opencv导入安卓项目里面
Android Studio中创建一个Android项目,创建好之后,选择File->New->Import Module
然后把opencv文件夹里面的选择SDK/JAVA
这样就导入进去了
第三步:添加依赖
在File/Project structure
添加这个依赖后,恭喜你这个还没弄完,可以在代码里面调用opencv库的代码了,但是会出现下面的问题
这个查了一下好像是没装安装OpenCV Manager这个东西,然后下了我们要解决这个问题
第四步:解决没安装OpenCV Manager这个问题
在自己app的文件夹里面app/src/mian下面创建一个jniLibs的文件夹
然后将下载下了的opencv库文件夹里面的opencv-android\OpenCV-android-sdk\sdk\native\libs
libs这个文件夹东西全部复制到jniLibs文件夹里面
结果如下:
然后在项目的build.gradle里面添加东西
添加的代码
compile fileTree(dir: "$buildDir/native-libs", include: 'native-libs.jar')
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)
}
第五步:处理opencv库和安卓版本问题
app 的 build.gradle 然后打开OpenCVLibrary340的build.gradle 有些地方需要一致
这个是app的gradle
这个是opencv库的build.gradle
就是把他们改成一样的
第六步:在调用opencv库的那个活动里面添加如下代码
/***
* opencv库 加载并初始化回调的函数
*/
private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
@Override
public void onManagerConnected(int status) {
super.onManagerConnected(status);
switch (status){
case BaseLoaderCallback.SUCCESS:
Log.d("233","加载成功");
break;
default:
super.onManagerConnected(status);
Log.d("233","加载失败");
break;
}
}
};
@Override
protected void onResume() {
super.onResume();
if (!OpenCVLoader.initDebug()){
Log.d("233","可以");
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_10,this,mLoaderCallback);
}else {
mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS);
}
}
就是看下opencv库成功运行没
弄了好久,终于弄完了,还有一点很重要
把opencv库的算法代码重新开个线程,因为很耗时
这个教训可是我拿好久时间换来的哇哇哇,唉,希望我的博客对别人有帮助