天天看點

Android Studio配置openvc

最近項目中需要用到opencv,于是就研究了一下怎麼在Android studio中配置opencv,記錄一下,免得以後還會使用。

一.因為本人Android Studio是4.1的,網上資料大多是3.5版本,配置略有不同,主要參考  Android Studio 中配置 Opencv4.5_hui~奔跑的部落格,簡單明了

  以下标明我的步驟:

  

Android Studio配置openvc
 
Android Studio配置openvc

   點finish即可。

二.配置過程中導入的module不是選Java 而是直接選擇sdk!!

三.在執行完前兩步後,可以采用以下方式調用openvc的函數

  

Android Studio配置openvc
      可以在activity裡面先打一個Mat ,然後滑鼠放上去點選添加依賴,
Android Studio配置openvc

     點完之後,這兩個就自動幫你配好了,不用再手動改來改去了。

     等待完後,就可以import class了,即可調用openvc函數。

四.測試代碼(借鑒于 Android Studio 使用OpenCV配置_pengshuyes的部落格)

 activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<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"
        android:paddingLeft="16dp"
        android:paddingRight="16dp"
        android:paddingTop="16dp"
        android:paddingBottom="16dp"
        tools:context="top.liushupeng.opencv0603.MainActivity">
     
        <ImageView
            android:id="@+id/img_2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            />

        <Button
            android:id="@+id/btn_gray_process"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/img_2"
            android:layout_centerHorizontal="true"
            android:text="灰階化"/>
</RelativeLayout>
      

MainActivity.java

ackage top.liushupeng.opencvtest;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
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.LoaderCallbackInterface;
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 imgHuaishi;
    private static boolean flag = true;
    //private static boolean isFirst = true;
    private static final String TAG = "MainActivity";

    //OpenCV庫加載并初始化成功後的回調函數
    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, "成功加載");
                    break;
                default:
                    super.onManagerConnected(status);
                    Log.i(TAG, "加載失敗");
                    break;
            }
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initUI();
        btnProcess.setOnClickListener(new ProcessClickListener());
    }

    public void initUI() {
        btnProcess = (Button) findViewById(R.id.btn_gray_process);
        imgHuaishi = (ImageView) findViewById(R.id.img_2);
        Log.i(TAG, "initUI sucess...");

    }

    public void procSrc2Gray() {
        Mat rgbMat = new Mat();
        Mat grayMat = new Mat();
        srcBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.img_2);
        grayBitmap = Bitmap.createBitmap(srcBitmap.getWidth(), srcBitmap.getHeight(), Bitmap.Config.RGB_565);
        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
            procSrc2Gray();
            if (flag) {
                imgHuaishi.setImageBitmap(grayBitmap);
                btnProcess.setText("檢視原圖");
                flag = false;
            } else {
                imgHuaishi.setImageBitmap(srcBitmap);
                btnProcess.setText("灰階化");
                flag = true;
            }
        }

    }

    @Override
    public void onResume() {
        super.onResume();
        if (!OpenCVLoader.initDebug()) {
            Log.d(TAG, "Internal OpenCV library not found. Using OpenCV Manager for initialization");
            OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_13, this, mLoaderCallback);
        }
        else{
            Log.d(TAG, "OpenCV library found inside package. Using it!");
            mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS);
        }
    }
}      

效果圖:

Android Studio配置openvc
Android Studio配置openvc

五.總結:

    本次配置未出現 opencv manager package was not found 這個錯誤,之前導入module時導入的是java這次是sdk,不知道是不是這個原因。

繼續閱讀