Android Studio中使用OpenCV库的方法

暑假两个月做了这么多东西几乎一篇博客都没写…现在开始补坑,不然这个项目结束怕是东西都要忘干净了。从这篇开始记录一下,以后想重新上手也简单一些。

现在做的项目需要用到使用摄像头进行颜色识别,也就是牵扯到图像处理的部分,于是便选用了OpenCV这个计算机视觉库,这样用的时候直接调用这个库里给你封装好的函数就可以了。

本系列文章参考了《OpenCV Android 开发实战》(贾志刚著,机械工业出版社),这本书给我学习OpenCV4Android带来了很大帮助,在这里感谢志刚大佬。推荐大家阅读。

新建一个工程、下载OpenCV SDK 之类的就不多说了,这里直接开始说实际配置过程相关的东西。本文所选用的OpenCV版本是3.3。

一、在项目中添加OpenCV库

1.添加OpenCV4Android SDK的依赖

File——New——Import Module,选择内层的java

Android Studio中使用OpenCV库的方法_第1张图片

文件夹,如上图所示,模块名称会自动显示出当前的OpenCV的版本信息,如下图所示。

Android Studio中使用OpenCV库的方法_第2张图片
点击Next——Finish完成导入。然后再选择File——Project Structure 打开依赖项添加对话框,选择最右边的+按钮,完成添加后如下图所示。

Android Studio中使用OpenCV库的方法_第3张图片

2.复制本地依赖项OpenCV库文件

把视图切换到Project,就可以看到多了一个库文件夹OpenCVLibrary330

选择app下面的libs,然后把OpenCV Android SDK目录native\libs下面文件与文件夹,复制到这个libs里面去。

这里面的是对不同板子芯片abi的适配,大部分的都是armeabi-v7a,牛逼一点的是v8a。根据我这个项目所需要用到的板子,我这里只选择了三个文件夹复制进去。如图所示。

Android Studio中使用OpenCV库的方法_第4张图片

3.修改项目和app的build.gradle文件

app的build.gradle
(1)在依赖部分添加如下代码

 implementation fileTree(dir: "$buildDir/native-libs", include: 'native-libs.jar')

(2)在末尾添加如下配置代码:

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)
}

项目的bulid.gradle
在repositories中添加如下代码:

maven {
            url 'https://maven.google.com/'
            name 'Google'
        }
    }

原书中没有提到这一点,但是我如果不加这一段就无法加载OpenCV本地库,这一点我没有搞懂原因,如果有大佬知晓烦请指导,万分感谢。

修改完毕后,选择build——clean project,之后再选择rebuild project,就完成了OpenCV编译环境的配置。

这时候你可能会出现几十个以下相关报错:

程序包android.hardware.camera2不存在

如果出现了这种错误,选择File——Project Structure 打开依赖项添加对话框,找到openCVLibrary,在Properties选项卡中,将Compile sdk Version修改为API21以上即可。

Android Studio中使用OpenCV库的方法_第5张图片

二、代码中实际使用OpenCV的方法

配置完环境后,如果我们要在代码中用到OpenCV库,以便能够使用其中的图像处理函数,需要进行以下步骤:

1.在MainActivity中,onCreate函数的前面添加:

private String CV_TAG = "OpenCV";

2.定义加载OpenCV本地库的函数:

private void iniLoadOpenCV() {
        boolean success = OpenCVLoader.initDebug();
        if(success) {
            Log.i(CV_TAG, "OpenCV Libraries loaded...");
        } else {
            Toast.makeText(this.getApplicationContext(),
                    "WARNING: Could not load OpenCV Libraries!",
                    Toast.LENGTH_LONG).show();
        }
    }

3.在onCreate函数中添加加载OpenCV本地库的语句:

 iniLoadOpenCV();

当然前面要import进来OpenCV相关的包。这样之后,就可以使用OpenCV库中的函数了。这里我使用了书中一个灰度处理的测试用例:

//设置按下按钮所响应的事件的内容(实际使用OpenCV库的部分)
    public void onClick(View v) {
        Bitmap bitmap = (BitmapFactory.decodeResource(this.getResources(),R.drawable.wjc));
        Mat src = new Mat();
        Mat dst = new Mat();
        Utils.bitmapToMat(bitmap,src);
        Imgproc.cvtColor(src,dst,Imgproc.COLOR_BGRA2GRAY);
        Utils.matToBitmap(dst,bitmap);
        ImageView iv = (ImageView)this.findViewById(R.id.sample_img);
        iv.setImageBitmap(bitmap);
        src.release();
        dst.release();

实现效果如图:

Android Studio中使用OpenCV库的方法_第6张图片

Android Studio中使用OpenCV库的方法_第7张图片

你可能感兴趣的:(Android开发记录)