服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Android - Android通过Java sdk的方式接入OpenCv的方法

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

2022-12-08 14:11Mp5A5 Android

这篇文章主要介绍了Android通过Java sdk的方式接入OpenCv的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

简述

公司最近要做运动检测和眼球追踪,鉴于资费等因素,最后考虑使用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="http://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内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://www.jianshu.com/p/af430ae13ecd

延伸 · 阅读

精彩推荐
  • Androidandroid中圆角图像生成方法

    android中圆角图像生成方法

    这篇文章主要介绍了android中圆角图像生成方法,涉及Android处理圆角图像的技巧,需要的朋友可以参考下...

    沧海一粟7792021-03-17
  • AndroidAndroid唤醒、解锁屏幕代码实例

    Android唤醒、解锁屏幕代码实例

    这篇文章主要介绍了Android唤醒、解锁屏幕代码实例,本文讲解了唤醒、解锁屏幕需要的权限和操作代码实例,代码中包含详细注释,需要的朋友可以参考下...

    Android开发网6082021-03-22
  • Androidandroid自定义手表效果

    android自定义手表效果

    这篇文章主要为大家详细介绍了android自定义手表效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    cf88336612022-11-15
  • AndroidFlutter实现webview与原生组件组合滑动的示例代码

    Flutter实现webview与原生组件组合滑动的示例代码

    这篇文章主要介绍了Flutter实现webview与原生组件组合滑动的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值...

    YouCii7012022-10-09
  • AndroidAndroid编程实现将压缩数据库文件拷贝到安装目录的方法

    Android编程实现将压缩数据库文件拷贝到安装目录的方法

    这篇文章主要介绍了Android编程实现将压缩数据库文件拷贝到安装目录的方法,涉及Android处理压缩文件的相关技巧,具有一定参考借鉴价值,需要的朋友可以参...

    freesonhp7972021-04-06
  • AndroidAndroid动画教程之属性动画详解

    Android动画教程之属性动画详解

    这篇文章主要给大家介绍了关于Android动画教程之属性动画的相关资料,文中通过示例代码介绍的非常详细,对各位Android开发者们具有一定的参考学习价值...

    被被的安卓编程之路6472022-10-17
  • Androidandroid编程实现类似于支付宝余额快速闪动效果的方法

    android编程实现类似于支付宝余额快速闪动效果的方法

    这篇文章主要介绍了android编程实现类似于支付宝余额快速闪动效果的方法,涉及Android时间函数的相关使用技巧,具有一定参考借鉴价值,需要的朋友可以参考...

    Jlins4822021-04-12
  • AndroidAndroid自定义View实现弹幕效果

    Android自定义View实现弹幕效果

    这篇文章主要为大家详细介绍了Android自定义View实现弹幕效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    BrcLi7942022-11-09