您的位置:首页 > 移动开发 > Android开发

Android OpenCV开发环境搭建

2017-07-01 14:08 393 查看
OpenCV是一个基于BSD许可发行的跨平台计算机视觉库,计算机视觉目前应用领域广泛,例如人脸识别,移动侦测等等,可以算作是人工智能的一个重要组成部分,而OpenCV在机器视觉领域具有举足轻重的地位,本人也是刚开始入手学习,今天就来看看如何搭建OpenCV的Android开发环境。

首先,到OpenCV官网下载最新版本的OpenCV,进入下面的网页

http://opencv.org/releases.html

下载对应版本的Android Pack即可,下载好之后解压缩,可以看到目录结构如下,后面的OpenCV源码路径如果使用相对路径,都是从这个目录开始的。



我们主要关注sdk目录,其中有我们需要的sdk包。启动Android Studio,创建一个新的项目,从菜单中依次选择File->New->Import Module...,这时弹出界面:



选择Source directory,路径选择到sdk/java目录,点击Next,然后点击Finish。

Android开始引入项目,不过会报错。莫慌,这是因为引入的项目gradle配置不对,打开之前引入的openCVLibary320项目目录(我们的Android项目目录下存在这个目录),修改其中的build.gradle的
compileSdkVersion

buildToolsVersion

minSdkVersion

targetSdkVersion

使之与我们项目中app目录下的build.gradle的版本号一致,然后重新编译项目,这次应该可以通过编译了。

不过此时还没有结束,OpenCV使用了NDK,我们需要将OpenCV相关的库文件加入项目。在Android项目的app/src/main/目录下创建jniLibs目录(这是jni动态库的默认位置,如果不放在这个位置,需要配置gradle,所以建议大家还是先放在这里),复制OpenCV的sdk/native/libs/目录下的所有目录到jinLibs目录中。这样,我们就加入了OpenCV的库。

最后,选择File->Project Structure...,在弹出的对话框中左侧Modules选择app,右侧点击Dependencies,点击加号,选择Module Dependency,加入OpenCV项目的依赖。至此,OpenCV库项目就添加完成了。做一个Demo测试一下搭建好的项目环境。由于我们需要使用Camera,需要在Manifest文件中加入使用相机的权限
<uses-permission android:name="android.permission.CAMERA" />


然后,为了保证我们的MainActivity为水平的,在Manifest的MainActivity节点加入属性

<activity android:name=".MainActivity"
android:screenOrientation="landscape">


然后看看布局文件

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.yjp.testopencv.MainActivity">

<org.opencv.android.JavaCameraView
android:id="@+id/cameraView"
android:layout_width="match_parent"
android:layout_height="match_parent" />

</FrameLayout>


我们使用OpenCV提供的JavaCameraView,实际上它的内部使用了SurfaceView。下面看看MainActivity的代码:

package com.example.yjp.testopencv

import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_main.*
import org.opencv.android.OpenCVLoader

class MainActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}

override fun onResume() {
super.onResume()
OpenCVLoader.initDebug()
cameraView.enableView()
}

override fun onPause() {
super.onPause()
cameraView.disableView()
}
}


这里说明一下,initDebug实际上返回的是false,因为该方法默认会去寻找我们是否安装了OpenCV的OpenCV Manager,如果没有找到,就会使用我们项目中的libopencv_java3.so动态库进行加载,会使用本地的库。我们已经在本项目中添加了OpenCV支持,所以没有必要再去使用OpenCV Manager。现在我们运行程序,就能看到预览的效果了。是不是比使用Android本身的SurfaceView还要简单?

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: