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 Studio 集成OpenCV Sdk
1、Android Studio 下载cmake和ndk
2、Android Studio 新建ndk项目
3、Android Studio 导入OpenCv Sdk
将下载后的OpenCv Sdk进行解压。
将解压后的OpenCv Sdk目录下的sdk目录里面的java包通过Moudule的方式导入到Studio中。
3、修改导入opencv的build.gradle
修改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。
AndroidManifest增加相机权限
<uses-permission android:name="android.permission.CAMERA" /> <uses-feature android:name="android.hardware.camera" /> <uses-feature android:name="android.hardware.camera.autofocus" />
三、使用
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>
结果展示:
展示图
Demo 的 Github 地址 https://github.com/Mp5A5/AndroidOpenCv
到此这篇关于Android通过Java sdk的方式接入OpenCv的方法的文章就介绍到这了,更多相关Android Java sdk接入OpenCv内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
您可能感兴趣的文章:
- Android 通过cmake的方式接入opencv的方法步骤
- Android(安卓)开发通过NDK调用JNI,使用opencv做本地c++代码开发配置方法 边缘检测 范例代码
- Android fragment 重叠问题——通过hide,show方式导致的解决方法
- Android中通过view方式获取当前Activity的屏幕截图实现方法
- Android接入多盟广告SDK--让你的APP通过广告平台赚钱
- android中java代码中通过资源id加载String方法
- Android fragment 重叠问题——通过hide,show方式导致的解决方法
- Android 通过接口的方式去调用服务里面的方法
- Android中广告渠道SDK接入方法
- Android(安卓)开发通过NDK调用JNI,使用opencv做本地c++代码开发配置方法 边缘检测 范例代码
- Android(java)学习笔记108:通过反射获取私有构造方法并且使用
- Android fragment 重叠问题——通过hide,show方式导致的解决方法
- Android通过接口方式调用服务里面的方法
- 如何通过java反射的方式对java私有方法进行单元测试
- Java>Map集合>>Map集合遍历方法_通过键找值的方式(迭代器遍历、增强for循环遍历)
- android通过线程回调java方法
- [转] Gradle: 此时不应有 Androidandroid-studiosdk oolslib\find_java.exe。解决方法
- android 通过apk方式接入第三方应用
- android 通过post方式提交数据的最简便有效的方法
- Android(java)学习笔记109:通过反射获取成员变量和成员方法并且使用