Android OpenCV开发环境搭建

来源:互联网 发布:个人简历制作模板软件 编辑:程序博客网 时间:2024/06/05 10:47

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.testopencvimport android.os.Bundleimport android.support.v7.app.AppCompatActivityimport kotlinx.android.synthetic.main.activity_main.*import org.opencv.android.OpenCVLoaderclass 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还要简单?