0%

OpenCV4Android学习录Demo1

OpenCV 3.1 在 samples目录下有几个示例Demo,其中第一个例子example-tutorial-1-camerapreview,用来获取摄像头输入帧,这篇博客记录了一下这个Demo在Android Studio下开发过程,以此开启OpenCV for Android之旅。

开发环境

Windows 10 x64
JDK 1.8.0
Android 6.0(API 23,最低API 18)
OpenCV 3.1.0 for Android SDK
Android Studio 2.1.1(Gradle版本2.10)

导入OpenCV库

Import Module

点击File->New->Import Module…,在弹出的窗口中找到OpenCV Android SDK下的sdk\java文件夹,点击Next,保持默认选项不动,再点击Finish,完成OpenCV库的导入。

Import Module

修改build.gradle

由于OpenCV库本身默认配置,我们需要修改OpenCVLibrary310\build.gradle文件,然后重新同步Gradle配置。修改OpenCVLibrary310\build.gradle文件与项目app的配置一致。修改前如下所示:

build.gradle

修改后如下所示:

build.gradle

具体对penCVLibrary310\build.gradle的修改如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
apply plugin: 'com.android.library'

android {
compileSdkVersion 23
buildToolsVersion "23.0.3"

defaultConfig {
minSdkVersion 16
targetSdkVersion 23
}

buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
}

配置模块依赖

点击File->Project Structure…,在弹出的Project Structure窗口中选择左边的app,在右边选择Dependencies,然后点击绿色添加按钮,选择Module dependency,在弹出的窗口中选择OpenCVLibrary310,一直点击OK,保存并关闭两个窗口。

build.gradle

添加jni库

复制OpenCV-android-sdk/sdk/native目录下的libs目录到工程的main目录下,重命名为jniLibs。

build.gradle

代码编写

这个例子是基于Android Studio构建OpenCV工程,实现了OpenCV捕捉相机输入帧。工程代码已上传至github:OpenCV4AndroidTutorial1,下面简单介绍一下代码。

java代码

一是实现CameraBridgeViewBase.CvCameraViewListener2接口,用于获取摄像头操作;
二是加载OpenCV库,在onResume阶段加载。
具体可查看MainActivity.java

xml布局

加入OpenCV自带的JavaCameraView组件:

1
2
3
4
5
6
<org.opencv.android.JavaCameraView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/surfaceCamera"
app:show_fps="true"
app:camera_id="any" />

manifest清单

添加使用相机权限和文件读写权限,还有应用特性支持:

1
2
3
4
5
6
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-feature android:name="android.hardware.camera" android:required="false"/>
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false"/>
<uses-feature android:name="android.hardware.camera.front" android:required="false"/>
<uses-feature android:name="android.hardware.camera.front.autofocus" android:required="false"/>

运行结果

运行结果

小结

  1. 这个小Demo演示了用Android Studio进行OpenCV开发的操作过程。
  2. 我们自建的项目有两种加载OpenCV库的方式:
    OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_1_0, this, mLoaderCallback);使用OpenCV Manager进行初始化,需要安装对应的OpenCV Manager,这种方式下,配置工程时可以直接跳过添加jni库环节;
    mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS); 使用jni库进行初始化。本例用的就是这种方式,无需安装Manger,只是在配置工程的时候添加jni库。