OpenCV的部署


转载请说明出处!
作者:kqw攻城狮
出处:个人站 | CSDN


官网

官网

之前时间比较紧张,在网上找了很多文章,写了一个人脸识别的程序,也是模棱两可,今天开始抽时间系统学习一下OpenCV在Android上的使用。

OpenCV版本

后面用到的是OpenCV的2.4.11版本,据说新的3.x的版本和2.x的版本改动较大,2.x的版本学习完可以再看看与3.x版本的区别。毕竟老版本的学习资源更多一些。

SDK

我们下载完SDK以后,里面会有一个Library的库供我们使用,但是核心的功能不在这里面,它只是一个调用的工具,我们还需要安装OpenCV Manager,在下载的SDK里有一个apk的文件夹,里面是对应各个cup架构的Manager,选择对应的Manager安装就可以了。
除了安装OpenCV Manager,也可以直接在工程里添加so,但是这会使我们的APK体积大大增加,不过这不是我们要关心的,我们主要学习怎么使用OpenCV。

OpenCV的图像存储

OpenCV使用Mat对象存储图像,该对象保存了图像的行数、列数、数据等能唯一标识该图像的信息,并且可以利用该数据还原图像,不同的图像所包含的信息量也不同,例如彩色图像所包含的信息量就要比灰色图像多得多。因为灰色图是单通道的,彩色图是三通道的。

灰色图

灰色图像单通道

数字代表指定颜色的亮度
以整数表示时,取值范围是0~255,0表示纯黑色,255表示纯白色。
以浮点数表示时,取值范围是0~1,0表示纯黑色,1表示纯白色。

彩色图

彩色图像三通道

第一通道表示蓝色,第二通道表示绿色,第三通道表示红色。

OpenCV的线性滤波器

有的时候,图像信息量太大,处理的时间就会比较长(有的时候可能不需要这么信息就可以解析出来我们想要的结果了),为了解决这个问题,OpenCV提供了一个线性滤波器,可以对图片进行模糊处理。

很多线性滤波器都利用了称为的数字向量,核可以看作是沿着像素滑动的窗口,并把计算结果输出给核像素。

下面的图中,是一个3 * 3的核作用在了一副10 * 10的图像上。

核

创建OpenCV工程

Android Studio版本:2.1

  1. 创建Android Studio工程,命名为FirstOpenCVDemo
  2. 导入OpenCV Library

    File -> New -> Import Module

    导入OpenCV Library
    导入OpenCV Library

  3. 引用OpenCV Library

    引用OpenCV Library

  4. 安装OpenCV Manager

    加载OpenCV Manager,如果诶呦安装会有提示

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
private BaseLoaderCallback mOpenCVCallBack = new BaseLoaderCallback(this) {
@Override
public void onManagerConnected(int status) {
switch (status) {
case LoaderCallbackInterface.SUCCESS:
Log.i(TAG, "OpenCV Manager已安装,可以学习OpenCV啦。");
break;
default:
super.onManagerConnected(status);
break;
}
}
};
@Override
protected void onResume() {
super.onResume();
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_11, this, mOpenCVCallBack);
}

到此,准备工作做完,就可以在此工程上学习OpenCV了。

如果你在运行的过程中,遇到这样的问题

问题

这是SDK版本的问题,将targetSdkVersion改为19即可。

运行结果

OpenCV部署成功

源码

FirstOpenCVDemo

坚持原创技术分享,您的支持将鼓励我继续创作!