Android Studio配置OpenCV

背景概述

最近在做Android系统的App开发环境搭建。硬件平台采用基于安卓系统的带有相机或者OTG接口的智能设备,利用自带相机传感器或者通过OTG外接USB相机实现影像数据的采集。采集到的影像数据通过OpenCV开源视觉库进行处理,处理结果存储到在安卓平台上广泛使用的SQLite数据库。

版本概览

Android Studio版本:3.1.2;
OpenCV版本:3.2.0;
Android minimum SDK : Android 4.0;

Android Studio 的安装

Android Studio下载地址:http://www.android-studio.org/
安装配置过程:https://blog.csdn.net/m0_37240709/article/details/76069176

OpenCV的配置及使用

1准备工作

OpenCV安卓版本下载:https://www.opencv.org/releases.html 或者 https://sourceforge.net/projects/opencvlibrary/files/opencv-android/
OpenCV安卓版官网介绍:https://opencv.org/platforms/android/,包括OpenCV的HelloWorld工程怎么创建。
下载的AndroidopecvSDK解压到某一目录,解压出的文件在后续的步骤中会用到。

2工程建立

使用Android Studio建立工程的步骤。这里采用纯JAVA的方式调用OpenCV。
第一次打开Android Studio软件


这里写图片描述

输入工程名,设置工程路径


这里写图片描述

选择运行环境,一般选择Android 4.0,可以在大部分设备上运行。


这里写图片描述

选择界面模板


这里写图片描述

创建新工程后IDE显示的目录结构。可能跟文件浏览器的目录结构不一样,Android Studio把类似的文件放到一起显示。


这里写图片描述

3opencv的配置

把第一步准备工作中解压的文件中的java文件夹复制到新建工程的根目录。假如第一步把sdk解压到D盘根目录,那么java文件夹所在位置是D:\OpenCV-android-sdk\sdk。
拷贝后新建工程的根目录如下:


这里写图片描述

在Android Studio菜单栏选择File->new->import module,打开导入模块界面,选择刚才复杂的java文件夹,模块名称自动识别成openCVLibrary320。点击Next,采用默认设置,点击完成。


这里写图片描述

添加完模块后工程目录结构:


这里写图片描述

在Android Studio菜单栏选择File->project structure,打开如下界面,按顺序操作,在app模块中加入opencv依赖


这里写图片描述

然后把opencv模块的build.gradle文件中的compileSdkVersion、minSdkVersion、targetSdkVersion与app模块的build.gradle设置为一样的。

4opencv的使用

在MainActivity.java文件头部的加入

import org.opencv.android.BaseLoaderCallback;
import org.opencv.android.LoaderCallbackInterface;
import org.opencv.android.OpenCVLoader;
import org.opencv.android.Utils;
import org.opencv.calib3d.Calib3d;
import org.opencv.core.Mat;
import org.opencv.core.MatOfPoint2f;
import org.opencv.core.Point;
import org.opencv.core.Size;
import org.opencv.imgproc.Imgproc;

在MainActivity.java类定义内部加入变量mLoaderCallback的定义。

    private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
        @Override
        public void onManagerConnected(int status) {
            switch (status) {
                case LoaderCallbackInterface.SUCCESS: {
                    Log.i(TAG, "OpenCV loaded successfully");
                }
                break;
                default: {
                    super.onManagerConnected(status);
                }
                break;
            }
        }
    };

在MainActivity.java内部加入的重载函数onResume

    @Override
    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);
        }
    }

此时就可以在这个工程中使用OpenCV的函数。
比如,在MainActivity.java的按钮回调函数或者触摸回调函数中加入如下读取图片、转为OpenCV的mat格式、二值化操作。

//读取图片
String fileName = Environment.getExternalStorageDirectory().getPath() + "/" + "你在根目录下的图片文件名" + ".jpg";
Bitmap bitmap;
bitmap = BitmapFactory.decodeFile(fileName);
Mat mat_src = new Mat();
Mat mat_dst = new Mat();
//从bitmap转为Mat
Utils.bitmapToMat(bitmap, mat_src);
//二值化
Imgproc.threshold(mat_src,mat_dst,100,255,0);

App运行结果截图

app运行的结果,从左往右分别是原图,二值化,棋盘格找角点的图片
这里写图片描述

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

仟人斩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值