這篇文章將為大家詳細(xì)講解有關(guān)如何使用Android studio3.6的java api方式調(diào)用opencv,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。
為奎文等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及奎文網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為網(wǎng)站設(shè)計(jì)制作、網(wǎng)站設(shè)計(jì)、奎文網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!
Android是一種基于Linux內(nèi)核的自由及開放源代碼的操作系統(tǒng),主要使用于移動(dòng)設(shè)備,如智能手機(jī)和平板電腦,由美國(guó)Google公司和開放手機(jī)聯(lián)盟領(lǐng)導(dǎo)及開發(fā)。
基本環(huán)境:
Android studio3.6
NDK:r15c(盡量使用該版本)
Opencv3.4.1 android sdk
操作:
(1)新建工程,選擇Empty Activity,工程名為op
(2)File->New->Import Module,然后選擇自己的java-opencv的相對(duì)應(yīng)路徑,比如,D:\Android\OpenCV-android-sdk\sdk\java
(3)修改openCVlibrary341下面的build.gradle中的,compileSdkVersion,buildToolsVersion,minSdkVersion,targetSdkVersion,使得和自己的工程下面的app/build.gradle的版本一致。
(4)修改openCVlibrary341下面的src/main
中的AndroidManifest.xml中的minSdkVersion,targetSdkVersion,使得和自己的工程下面的app/build.gradle的版本一致。
(5)app/src/main/res/drawable下面增加一張圖片
(6)app/src/main/res/layout中修改布局文件activity_main.xml
"
(7)修改app/src/main/java/com.example.op下面的MainActivity
package com.example.op; import androidx.appcompat.app.AppCompatActivity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.ImageView; import org.opencv.android.BaseLoaderCallback; import org.opencv.android.OpenCVLoader; import org.opencv.android.Utils; import org.opencv.core.Mat; import org.opencv.imgproc.Imgproc; public class MainActivity extends AppCompatActivity { Button btnProcess; Bitmap srcBitmap; Bitmap grayBitmap; ImageView img; private static boolean flag = true; private static boolean isFirst = true; private static final String TAG = "MainActivity"; private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) { @Override public void onManagerConnected(int status) { // TODO Auto-generated method stub switch (status){ case BaseLoaderCallback.SUCCESS: Log.i(TAG, "baseloader success"); break; default: super.onManagerConnected(status); Log.i(TAG, String.valueOf(status)); break; } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btnProcess = (Button)findViewById(R.id.btn_gray_process); img = (ImageView)findViewById(R.id.img); Log.i(TAG, "initUI sucess..."); btnProcess.setOnClickListener(new ProcessClickListener()); } public void procSrc2Gray(){ Mat rgbMat = new Mat(); Mat grayMat = new Mat(); srcBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.dilireba); grayBitmap = Bitmap.createBitmap(srcBitmap.getWidth(), srcBitmap.getHeight(), Bitmap.Config.ARGB_8888); Utils.bitmapToMat(srcBitmap, rgbMat);//convert original bitmap to Mat, R G B. Imgproc.cvtColor(rgbMat, grayMat, Imgproc.COLOR_RGB2GRAY);//rgbMat to gray grayMat Utils.matToBitmap(grayMat, grayBitmap); //convert mat to bitmap Log.i(TAG, "procSrc2Gray sucess..."); } private class ProcessClickListener implements View.OnClickListener { @Override public void onClick(View v) { // TODO Auto-generated method stub if(isFirst) { procSrc2Gray(); isFirst = false; } if(flag){ img.setImageBitmap(grayBitmap); btnProcess.setText("gray image"); flag = false; } else{ img.setImageBitmap(srcBitmap); btnProcess.setText("rgb image"); flag = true; } } } @Override protected void onResume() { // TODO Auto-generated method stub super.onResume(); //load OpenCV engine and init OpenCV library OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION, getApplicationContext(), mLoaderCallback); Log.i(TAG, "onResume sucess load OpenCV..."); } }
(8)app/build.gradledependencies中增加,
implementation project(path: ':openCVLibrary341')
(9)環(huán)境變量,path中增加adb所在路徑,C:\Users\xxx\AppData\Local\Android\Sdk\platform-tools
(10)命令行進(jìn)入apk所在的路徑D:\Android\OpenCV-android-sdk\apk,執(zhí)行,
adb install OpenCV_3.4.1_Manager_3.41_x86.apk
在模擬器中安裝opencv-manager
,然后重啟模擬器
工程目錄結(jié)構(gòu):
關(guān)于“如何使用Android studio3.6的java api方式調(diào)用opencv”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。