Android通過Java sdk的方式接入OpenCv的方法
簡述
公司最近要做運(yùn)動檢測和眼球追蹤,鑒于資費(fèi)等因素,最后考慮使用OpenCv的相關(guān)Api來來滿足業(yè)務(wù)需求。在使用過程中發(fā)現(xiàn)OpenCv的v4.2.0和v4.1.2接入后均存在一些bug,所以最后選擇了v4.1.0版本。
接入步驟
一、下載OpenCV Sdk
前往OpenCv官網(wǎng)下載對應(yīng)的Android v4.1.0版本的sdk。
二、Android Studio 集成OpenCV Sdk
1、Android Studio 下載cmake和ndk
2、Android Studio 新建ndk項(xiàng)目
3、Android Studio 導(dǎo)入OpenCv Sdk
將下載后的OpenCv Sdk進(jìn)行解壓。
將解壓后的OpenCv Sdk目錄下的sdk目錄里面的java包通過Moudule的方式導(dǎo)入到Studio中。
3、修改導(dǎo)入opencv的build.gradle
修改opencv的build.gradle的對應(yīng)的compileSdkVersion等信息。只需復(fù)制app下的build.gradle文件中的即可。記住兩點(diǎn):
apply plugin: 'com.android.library'一定要改成library;
去掉applicationId "com.xx.xx"
4、導(dǎo)入so庫
在項(xiàng)目app/src/main目錄下新建jniLibs,并將解壓后的OpenCv Sdk 目錄下對應(yīng)的路徑 sdk/native/libs 中的 文件復(fù)制到j(luò)niLibs。
AndroidManifest增加相機(jī)權(quán)限
<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、動態(tài)申請相機(jī)權(quán)限
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() // 旋轉(zhuǎn)屏幕 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>
結(jié)果展示:
展示圖
Demo 的 Github 地址 https://github.com/Mp5A5/AndroidOpenCv
到此這篇關(guān)于Android通過Java sdk的方式接入OpenCv的方法的文章就介紹到這了,更多相關(guān)Android Java sdk接入OpenCv內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 解決java.lang.NoClassDefFoundError: android.support.v4.animation.AnimatorCompatHelper問題
- Java可以寫android的應(yīng)用程序嗎
- 解決AndroidStudio無法運(yùn)行java中的mian方法問題
- Java/Android 實(shí)現(xiàn)簡單的HTTP服務(wù)器
- java、android可用的rtp封包解包h264案例
- AndroidStudio插件GsonFormat之Json快速轉(zhuǎn)換JavaBean教程
- 使用Android studio3.6的java api方式調(diào)用opencv
- 淺談Android Studio導(dǎo)出javadoc文檔操作及問題的解決
- 解決android studio 打開java文件 內(nèi)容全變了的問題
- Android Studio Kotlin代碼和java代碼相互轉(zhuǎn)化實(shí)例
- Delphi在Android下使用Java庫的方法
- Android實(shí)現(xiàn)上傳圖片至java服務(wù)器
- Android 是如何捕捉 java 異常的
相關(guān)文章
Android無障礙自動化結(jié)合opencv實(shí)現(xiàn)支付寶能量自動收集操作方法
opencv可以進(jìn)行圖像識別,兩者結(jié)合在一起即可實(shí)現(xiàn)支付寶能量自動收集,opencv用于識別能量,無障礙服務(wù)用于模擬手勢,即點(diǎn)擊能量,這篇文章主要介紹了Android無障礙自動化結(jié)合opencv實(shí)現(xiàn)支付寶能量自動收集,需要的朋友可以參考下2024-07-07Android自定義ActionProvider ToolBar實(shí)現(xiàn)Menu小紅點(diǎn)
這篇文章主要介紹了Android自定義ActionProvider ToolBar實(shí)現(xiàn)Menu小紅點(diǎn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-09-09Flutter質(zhì)感設(shè)計(jì)之底部導(dǎo)航
這篇文章主要為大家詳細(xì)介紹了Flutter質(zhì)感設(shè)計(jì)之底部導(dǎo)航的相關(guān)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-08-08Android利用Palette實(shí)現(xiàn)提取圖片顏色
Palette是一個類似調(diào)色板的工具類,根據(jù)傳入的bitmap,提取出主體顏色,使得圖片和顏色更加搭配,界面更協(xié)調(diào)。本文將詳解如何利用Palette實(shí)現(xiàn)提取圖片顏色,需要的可以參考一下2022-03-03