android开发分享Android通过Java sdk的方式接入OpenCv的方法

简述公司最近要做运动检测和眼球追踪,鉴于资费等因素,最后考虑使用opencv的相关api来来满足业务需求。在使用过程中发现opencv的v4.2.0和v4.1.2接入后均存在一些bug,所以最后选择了

简述

公司最近要做运动检测和眼球追踪,鉴于资费等因素,最后考虑使用opencv的相关api来来满足业务需求。在使用过程中发现opencv的v4.2.0和v4.1.2接入后均存在一些bug,所以最后选择了v4.1.0版本。

接入步骤

 一、下载opencv sdk

前往opencv官网下载对应的android v4.1.0版本的sdk。

Android通过Java sdk的方式接入OpenCv的方法

二、android studio 集成opencv sdk

1、android studio 下载cmake和ndk

Android通过Java sdk的方式接入OpenCv的方法

2、android studio 新建ndk项目

Android通过Java sdk的方式接入OpenCv的方法

Android通过Java sdk的方式接入OpenCv的方法

Android通过Java sdk的方式接入OpenCv的方法

3、android studio 导入opencv sdk

将下载后的opencv sdk进行解压。

将解压后的opencv sdk目录下的sdk目录里面的java包通过moudule的方式导入到studio中。

Android通过Java sdk的方式接入OpenCv的方法

Android通过Java sdk的方式接入OpenCv的方法

Android通过Java sdk的方式接入OpenCv的方法

3、修改导入opencv的build.gradle

Android通过Java sdk的方式接入OpenCv的方法

修改opencv的build.gradle的对应的compilesdkversion等信息。只需复制app下的build.gradle文件中的即可。记住两点:

apply plugin: ‘com.android.library’一定要改成library;

去掉applicationid “com.xx.xx”

4、导入so库

在项目app/src/main目录下新建jnilibs,并将解压后的opencv sdk 目录下对应的路径 sdk/native/libs 中的 文件复制到jnilibs。

Android通过Java sdk的方式接入OpenCv的方法

androidmanifest增加相机权限

  <uses-permission android:name="android.permission.camera" />  <uses-feature android:name="android.hardware.camera" />  <uses-feature android:name="android.hardware.camera.autofocus" />

Android通过Java sdk的方式接入OpenCv的方法

三、使用

 1、application中检测是否接入成功。

  override fun oncreate() {      super.oncreate()        opencvloader.initdebug()        val loadsuccess: boolean = opencvloader.initdebug()        if (!loadsuccess) {        log.e("-->", "opencv load fail")      } else {        log.e("-->", "opencv load success")      }  }

2、动态申请相机权限

  if(contextcompat.checkselfpermission(this, manifest.permission.camera) != packagemanager.permission_granted){     activitycompat.requestpermissions(this, arrayof(manifest.permission.camera), 1);  }else{     startactivity(intent(this,opencvactivity::class.java))  }

3、测试opencv

  class opencvactivity : appcompatactivity(), cvcameraviewlistener2 {      private lateinit var mrotateframe: mat    private lateinit var mrgbframe: mat      public override fun oncreate(savedinstancestate: bundle?) {      super.oncreate(savedinstancestate)      window.addflags(windowmanager.layoutparams.flag_keep_screen_on)      setcontentview(r.layout.activity_opencv)        jcv_surface_view.setcvcameraviewlistener(this)      // 开启前置摄像头      jcv_surface_view.setcameraindex(camerabridgeviewbase.camera_id_front)    }      public override fun onpause() {      super.onpause()      if (jcv_surface_view != null) {        jcv_surface_view!!.disableview()      }    }      public override fun onresume() {      super.onresume()      if (!opencvloader.initdebug()) {        opencvloader.initasync(opencvloader.opencv_version, this, mloadercallback)      } else {        mloadercallback.onmanagerconnected(loadercallbackinterface.success)      }    }      public override fun ondestroy() {      super.ondestroy()      if (jcv_surface_view != null) {        jcv_surface_view!!.disableview()      }    }      override fun oncameraviewstarted(width: int, height: int) {      mrotateframe = mat()      mrgbframe = mat()    }      override fun oncameraviewstopped() {}    override fun oncameraframe(inputframe: cvcameraviewframe): mat {      mrgbframe = inputframe.rgba()      // 旋转屏幕      core.flip(mrgbframe, mrotateframe, 1)      return mrotateframe    }      private val mloadercallback: baseloadercallback = object : baseloadercallback(this) {      override fun onmanagerconnected(status: int) {        when (status) {          loadercallbackinterface.success -> {            jcv_surface_view!!.enableview()          }          else -> {            super.onmanagerconnected(status)          }        }      }    }  }

  <relativelayout xmlns:android="https://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent">      <org.opencv.android.javacameraview      android:id="@+id/jcv_surface_view"      android:layout_width="match_parent"      android:layout_height="match_parent" />    </relativelayout>

结果展示:

Android通过Java sdk的方式接入OpenCv的方法

展示图

demo 的 github 地址 https://github.com/mp5a5/androidopencv

到此这篇关于android通过java sdk的方式接入opencv的方法的文章就介绍到这了,更多相关android java sdk接入opencv内容请搜索<计算机技术网(www.ctvol.com)!!>以前的文章或继续浏览下面的相关文章希望大家以后多多支持<计算机技术网(www.ctvol.com)!!>!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/addevelopment/898298.html

(0)
上一篇 2021年10月22日
下一篇 2021年10月22日

精彩推荐