使用Android studio3.6的java api方式調(diào)用opencv
基本環(huán)境:
Android studio3.6
NDK:r15c(盡量使用該版本)
Opencv3.4.1 android sdk
操作:
(1)新建工程,選擇Empty Activity,工程名為op
(2)File->New->Import Module,然后選擇自己的java-opencv的相對應(yīng)路徑,比如,D:AndroidOpenCV-android-sdksdkjava
(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
<RelativeLayout xmlns:android='http://schemas.android.com/apk/res/android' xmlns:tools='http://schemas.android.com/tools' android:layout_width='match_parent' android:layout_height='match_parent' tools:context='.MainActivity' > <ImageView android: android:layout_width='wrap_content' android:layout_height='wrap_content' android:background='@drawable/dilireba' android:layout_centerInParent='true'/> <Button android: android:layout_width='wrap_content' android:layout_height='wrap_content' android:layout_below='@id/img' android:layout_centerHorizontal='true' android:text='灰度化'/>'</RelativeLayout>
(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:UsersxxxAppDataLocalAndroidSdkplatform-tools
(10)命令行進(jìn)入apk所在的路徑D:AndroidOpenCV-android-sdkapk,執(zhí)行,
adb install OpenCV_3.4.1_Manager_3.41_x86.apk
在模擬器中安裝opencv-manager,然后重啟模擬器
工程目錄結(jié)構(gòu):
運(yùn)行:
The Code:
http://xiazai.jb51.net/202003/yuanma/op_jb51.rar
總結(jié)
到此這篇關(guān)于使用Android studio3.6的java api方式調(diào)用opencv的文章就介紹到這了,更多相關(guān)Android studio3.6java api調(diào)用opencv內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!
相關(guān)文章:
1. html清除浮動的6種方法示例2. JavaScript數(shù)據(jù)類型對函數(shù)式編程的影響示例解析3. 利用CSS3新特性創(chuàng)建透明邊框三角4. 詳解CSS偽元素的妙用單標(biāo)簽之美5. div的offsetLeft與style.left區(qū)別6. CSS代碼檢查工具stylelint的使用方法詳解7. 使用css實(shí)現(xiàn)全兼容tooltip提示框8. CSS3實(shí)例分享之多重背景的實(shí)現(xiàn)(Multiple backgrounds)9. vue實(shí)現(xiàn)將自己網(wǎng)站(h5鏈接)分享到微信中形成小卡片的超詳細(xì)教程10. 不要在HTML中濫用div
