一:在Android studio中配置opencv简介:
opencv是一款功能强大的图像处理工具,其支持多个平台的图像处理应用,如Windows,MAC,Android等,当然使用最多的还是PC端的开发,配置在VS2019中使用,方便快捷。笔者因为最近接触到一个项目,需要将PC端的工程移植到Android手机平台来实现,所以开始尝试在手机端进行图像处理的开发工作,之后会把进度和遇到的问题慢慢更新出来。
二:软件工具介绍:
1:Android studio3.6版本,我用的是目前最新的版本,遇到的问题也是最多的,下面会一一讲述
2:AndroidSDK
3:OpenCV-android-sdk
三:配置步骤:
1:安装好Android studio,这一步不会的可以去参考其他大佬的配置方法,正常安装即可。现在的Android studio比较人性化了,自身集成了java的jdk,不需要单独去配置java环境,一般来说,内置的jdk就已经够用了。
2:下载opencv for Android版,这个可以在官网下载,下载最新的版本就可以,下载下来后进行解压。
下载地址:链接:https://pan.baidu.com/s/1ciZGQjA3lUtCTIyHGdopBw
提取码:wo97
复制这段内容后打开百度网盘手机App,操作更方便哦
下载后解压出来的文件目录:我的是解压到:H:\AndroidProgram\OpenCV-android-sdk
3:打开Android studio,新建一个Android工程,
1)新建项目(名字随便取)
2)SDK版本 选择 API 29,Android系统向下兼容的,选最新的就可以
3)选择Empty Activity,等待新建完毕。
建成后依次点击
File–>New–>Import Module
1)选择H:\AndroidProgram\OpenCV-android-sdk\sdk\java
2)Module name: Android studio会自动填充这项为openCVLibrary343 (不同版本对应的数字也不一样),不用管它.
3)点击下一步,会出现三个复选框,都选上,点击Finish
4:上一步结束后,opencv包文件就倒入Android studio中了,接下来开始配置到项目中,依次点击:
1)File–>Project Structure
2)左边Dependencies栏下选择app
3)在右边挨着的上面一栏中可以看到+号
4)点击右边栏中的“+”,选择第三个Module Dependency
5)里面应该是对应的opencv的包文件,点击ok退出,然后再点击ok退出
::5:上面一步完成之后,开始对项目的配置文件进行修改,这一步很重要,版本号有一个地方没对准就会编译出错。
1)将视图切换到Android,如图所示
2)可以看到Gradle Scripts目录下,有三个build.gradle文件,我们需要对app的build.gradle和opencv的build.gradle文件进行版本号的修改,分别记下app的build.gradle文件中的
compileSdkVersion
buildToolsVersion
minSdkVersion
targetSdkVersion
后面的数值
3)点击打开opencv的build.gradle文件,把文件中对应的
compileSdkVersion
buildToolsVersion
minSdkVersion
targetSdkVersion
后的数值改成app中一样的
这是app的build.gradle文件
这是修改完成后opencv的build.gradle文件
6:上一步完成后,opencv在Android中的配置就基本完成了,这个时候先点击一下Build-Make project,构建一下项目,看下会不会报错,只要版本号修改的一样,应该不会报错了。注意这里有可能会报一个最小版本大于虚拟机版本的错误,只需要把minSdkVersion的数字改成你目前Android studio中创建的虚拟机的版本即可。
接下来我们要做的是一个很重要的步骤,就是把opencv的包文件添加到项目中,这样程序在手机上跑的时候就不需要opencv manager这个安装文件了。集成完成后,我们生成的APK安装包大小会有70M左右,当然这也是为了方便用户下载安装软件。总不能每一次安装APP,都要单独再下载安装一个opencv manager吧,这样的APP用户体验极差。
具体步骤:
1)把OpenCV sdk for Android文件下H:\AndroidProgram\OpenCV-android-sdk\sdk\native下的libs文件夹拷贝到你的安卓项目下,即Opencvtest\app\src\main下面,并且将libs改名为jniLibs
2)再次回到Android studio,点击Build-Make project,等待项目构建完成,如果没有报错,就证明opencv已经配置好了,接下来可以进行开发工作了。
最后在这里补充一个知识点,很多人在按照如上配置之后,跑opencv的程序会提示没有安装opencv manager,这个问题其实是因为老版的opencv中的onResume()函数没有成功调用集成进去的opencv包文件,我们只要修改一下即可:
老版的opencv程序中是这样写的:
@Override
public void onResume()
{
super.onResume();
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_9, this, mLoaderCallback);
}
我们需要改成这样,直接赋值我这一段进去即可:
@Override
//想要opencv不依赖opencvmanager,关键就在这里,除了基本的把文件复制到项目中外,
// onResume函数必须写成以下形式,这样才能调用到复制过来的包文件
public void onResume()
{
super.onResume();
if (!OpenCVLoader.initDebug()) {
Log.d(TAG, "Internal OpenCV library not found. Using OpenCV Manager for initialization");
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_0_0, this, mLoaderCallback);
} else {
Log.d(TAG, "OpenCV library found inside package. Using it!");
mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS);
}
//super.onResume();
//OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_9, this, mLoaderCallback);
}
下一篇文章我将讲述一下使用摄像头进行实时图像处理(灰度化,轮廓检测,滤波处理,HSV空间处理等),网上对于Android平台进行opencv开发多数都是对图片进行处理,对实时图像处理的文章少之又少,希望可以帮到更多初步踏入这个领域的朋友。