Androidstudio3.0上配置OpenCV3.4(不下载OpenCVmanager)

 在Androidstudio上配置OpenCV主要包括5个配置过程。这里假设读者已经下载好了OpenCVforAndroid的SDK,如果没有可以去OpenCV的GitHub上下载,我这里使用的是opencv-3.4.0-android-sdk.zip。在解压包中我们可以看到如下的文件(图左)

Androidstudio3.0上配置OpenCV3.4(不下载OpenCVmanager)_第1张图片 Androidstudio3.0上配置OpenCV3.4(不下载OpenCVmanager)_第2张图片

sdk目录即是我们开发opencv所需要的类库,sdk中包含了etc、java、native,其中java里面包含的是相关的API调用,而native中是一些编译好的文件,这两个都会用到;samples目录中存放着若干opencv应用示例,不过这些例子是eclipse的工程,无法直接在Androidstudio下跑,还得自己重新制作;apk目录则存放着对应于各内核版本的OpenCV_3.4.0_Manager_3.4应用安装包。

首先我们新建一个Android项目,比如CameraTutorial,将项目界面设置为project的样式。如下图所示

在所有准备工作做好了以后,我们就可以导入OpenCV的相关内容了。

1、导入java文件;进入file-new-import module,source directory中填入之前介绍的sdk包中的java文件,如下图所示,填好之后,会自动填入openCVLibrary340,(如下图所示)然后点击next。

接下来会弹出如下界面,直接默认就好,然后点击finish。

Androidstudio3.0上配置OpenCV3.4(不下载OpenCVmanager)_第3张图片

2、添加app的依赖;在file-project structure中点击app,点击dependencies,然后点击加号module dependency,添加openCVLibrary340。

Androidstudio3.0上配置OpenCV3.4(不下载OpenCVmanager)_第4张图片

调加成功以后会在app下的gradle文件的dependency节点下调加如下一行语句,所以在很多配置教程中在第1步操作后,直接在这里添加这样一行语句,而不进行第2步操作。

Androidstudio3.0上配置OpenCV3.4(不下载OpenCVmanager)_第5张图片

3、更改openCVLibrary340下的gradle文件中的相关属性。在这里主要涉及四个属性compileSdkVersion、buildToolsVersion、minSdkVersion、targetSdkVersion,关于这几个属性的介绍可看博客。要将openCVLibrary340下的gradle文件中的这四个属性和app下的gradle文件中的四个属性设置为一致。如下图所示,图左为openCVLibrary340下的gradle文件,图右为app下的gradle文件。更改好了以后,同步一下。

Androidstudio3.0上配置OpenCV3.4(不下载OpenCVmanager)_第6张图片    Androidstudio3.0上配置OpenCV3.4(不下载OpenCVmanager)_第7张图片

4、在src-main目录下新建一个文件夹jniLibs,将OpenCV中sdk下的native中的libs(在文章开头提到过)中的文件复制到该文件夹下。如下图所示。

Androidstudio3.0上配置OpenCV3.4(不下载OpenCVmanager)_第8张图片 

可是这些文件很大,我们任取一个出来,基本上都是这个数据结构,不过只有.so文件才是我们真正需要的,这里可以把其他文件全部删除,只留下.so文件即可,这样的话文件就比较小了。

Androidstudio3.0上配置OpenCV3.4(不下载OpenCVmanager)_第9张图片

5、在app-build.gradle中的android节点中加入自定义 jni的地址。(我的地址如下:)

sourceSets {
        main {
            jniLibs.srcDirs = ['src/main/jniLibs']
        }
    }

这样,我们的工作就算完成了。这样我们就算配置好了该有的资源了。不过不需要安装manager还需要在活动中调加如下语句(这里仅介绍opencv3.x版本的,至于opencv2.x版本的配置要稍微麻烦一些,具体可参考相关博客)

6、在activity中的onresume()方法中添加如下语句。(关于这部分的原理可参考博客)

@Override
    public void onResume()
    {
        super.onResume();
        if (!OpenCVLoader.initDebug()) {
            Log.i("cv", "Internal OpenCV library not found. Using OpenCV Manager for initialization");
        } else {
            Log.i("cv", "OpenCV library found inside package. Using it!");
        }
    }

至此配置已经完成,可是没有测试那是不过瘾的,我们就在layout中添加一些界面吧,然后再在activity中设置添加一个调节图片灰度的函数。

同时需要在drawable下面放置一张名为girl的图片。

Androidstudio3.0上配置OpenCV3.4(不下载OpenCVmanager)_第10张图片

在activity中添加如下代码

private void convert2Gray(){
        Mat src = new Mat();
        Mat temp = new Mat();
        Mat dst = new Mat();
        Bitmap image = BitmapFactory.decodeResource(this.getResources(),R.drawable.girl);//从bitmap中加载进来的图像有时候有四个通道,所以有时候需要多加一个转化
        Utils.bitmapToMat(image,src);//把image转化为Mat
        Imgproc.cvtColor(src,temp,Imgproc.COLOR_BGR2GRAY);//这里由于使用的是Imgproc这个模块所有这里要这么写
        Log.i("CV", "image type:" + (temp.type() == CvType.CV_8UC3));
        Imgproc.cvtColor(temp,dst,Imgproc.COLOR_GRAY2BGR);
        Utils.matToBitmap(dst,image);//把mat转化为bitmap
        ImageView imageView = findViewById(R.id.text_view);
        imageView.setImageBitmap(image);
        //release
        src.release();
        temp.release();
        dst.release();
    }

在oncerate()方法中添加

Button gray = findViewById(R.id.button);
        gray.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                convert2Gray();
            }
        });

至此,需要增加的代码就完成了。接下来就可以测试了。在测试之前最好先rebuild下工程。

可以看到app安装成功后会出现如下界面(图左),点击“灰度”这个button后会出现图右的界面。

Androidstudio3.0上配置OpenCV3.4(不下载OpenCVmanager)_第11张图片   Androidstudio3.0上配置OpenCV3.4(不下载OpenCVmanager)_第12张图片

可以很明显的看到图片变成了一张灰度图像,说明我们的OpenCV环境配置是成功的。

在这个过程中参考了如下博客

https://blog.csdn.net/waww116529/article/details/56833114(主要参考)

https://blog.csdn.net/sinat_30472685/article/details/74560585

https://www.cnblogs.com/gxclmx/p/7698486.html

 

 

你可能感兴趣的:(OpenCV)