Android Studio 2.2 + OpenCV3.4.1_4_Android_Sdk环境配置

准备文件

首先需要准备一下文件:

1、 opencv-3.4.1-android-sdk.zip,可以去OpenCV官网下载,如下,选择Android Pack

Android Studio 2.2 + OpenCV3.4.1_4_Android_Sdk环境配置_第1张图片

2、 已经在win7系统上安装好Android Studio2.2Java JDK1.8 JRE 1.8

进行安装

第一步:解压opencv-3.4.1-android-sdk.zip

将下载opencv-3.4.1-android-sdk.zip解压目录G:\OpenCV-android-sdk下目录结构如下图

Android Studio 2.2 + OpenCV3.4.1_4_Android_Sdk环境配置_第2张图片

sdk: 即是我们开发opencv所需要的类库,包括JavaC++,如下图


samples: 存放着若干opencv应用示例(包括人脸检测等),可为我们进行android下的opencv开发提供参考,如下图

Android Studio 2.2 + OpenCV3.4.1_4_Android_Sdk环境配置_第3张图片

注意要在手机上安装这些apk应用文件,首先要安装OpenCV3.4.1 Manager package,在apk目录下。(华为mate964的,所以选择安装OpenCV_3.4.1_Manager_3.41_arm64-v8a.apk

apk: 存放着对应于各内核版本的OpenCV应用安装包,如下图

Android Studio 2.2 + OpenCV3.4.1_4_Android_Sdk环境配置_第4张图片

第二步,配置Android Studio

2.1打开Android Studio,新建一个工程,命名为OpencvTest,一直点击Next,最后一步点击finish,如下图

Android Studio 2.2 + OpenCV3.4.1_4_Android_Sdk环境配置_第5张图片

Android Studio 2.2 + OpenCV3.4.1_4_Android_Sdk环境配置_第6张图片

Android Studio 2.2 + OpenCV3.4.1_4_Android_Sdk环境配置_第7张图片

Android Studio 2.2 + OpenCV3.4.1_4_Android_Sdk环境配置_第8张图片

Android Studio 2.2 + OpenCV3.4.1_4_Android_Sdk环境配置_第9张图片

Android Studio 2.2 + OpenCV3.4.1_4_Android_Sdk环境配置_第10张图片

完成之后会出现一些错误,此时,将app目录build.gradle文件的内容,如图2.1处的两个地方修改成24compile 'com.android.support:appcompat-v7:24.2.1',点击右上角Sync Now即可消除错误。

Android Studio 2.2 + OpenCV3.4.1_4_Android_Sdk环境配置_第11张图片

2.1 app目录build.gradle文件的内容

2.2File->New->Import Moudle,然后Source directory:选择G:\OpenCV-android-sdk\sdk\java,选择OK,选择Finish,如下图所示

Android Studio 2.2 + OpenCV3.4.1_4_Android_Sdk环境配置_第12张图片

Android Studio 2.2 + OpenCV3.4.1_4_Android_Sdk环境配置_第13张图片

完成后,编译器会重新编译gradle,然后会出现一些错误,此时打开OpenCVLibrary341目录下的build.gradle,将里面

1)compileSdkVersion

2)buildToolsVersion

3)minSdkVersion

4)targetSdkVersion

将上面四个内容与app文件夹下的build.gradle中信息相一致,然后点击右上角Try again,此时错误小时。如下图

Android Studio 2.2 + OpenCV3.4.1_4_Android_Sdk环境配置_第14张图片

Android Studio 2.2 + OpenCV3.4.1_4_Android_Sdk环境配置_第15张图片

2.3打开File->Project Structure,选择左侧的app,然后选择里面的Dependencies,点击+号,选择第三个Moudle dependency,选择

Android Studio 2.2 + OpenCV3.4.1_4_Android_Sdk环境配置_第16张图片

Android Studio 2.2 + OpenCV3.4.1_4_Android_Sdk环境配置_第17张图片

Android Studio 2.2 + OpenCV3.4.1_4_Android_Sdk环境配置_第18张图片

2.4右键点击Android StudioApp目录,选择New->Folder->JNI Folder,进入New Android Component窗口点击change Folder location,在New Folder location填写src/main/jniLibs然后点击Finish这样我们就创建了一个JNILibs的目录

Android Studio 2.2 + OpenCV3.4.1_4_Android_Sdk环境配置_第19张图片

Android Studio 2.2 + OpenCV3.4.1_4_Android_Sdk环境配置_第20张图片

2.5 进入电脑的G:\OpenCV-android-sdk\sdk\native\libs目录下,复制全部文件夹(这些CPU架构的文件夹),拷贝到Android Studio中我们刚刚建立的文件夹中。如下图所示:

Android Studio 2.2 + OpenCV3.4.1_4_Android_Sdk环境配置_第21张图片

Android Studio 2.2 + OpenCV3.4.1_4_Android_Sdk环境配置_第22张图片

Android Studio 2.2 + OpenCV3.4.1_4_Android_Sdk环境配置_第23张图片

完了之后,我们会看到jniLibs目录下会有刚刚我们复制的文件夹。这样,我们就把这些CPU架构文件导入到jniLibs文件夹内了。

Android Studio 2.2 + OpenCV3.4.1_4_Android_Sdk环境配置_第24张图片

至此,我们已经完全配置好Android Studio for OpenCV的开发环境了。

第三步,测试OpenCV

3.1我们在MainActivity.java中的public class MainActivity extends AppCompatActivity函数中添加以下代码:

 
   
    static{        if(!OpenCVLoader.initDebug()){            //handle initialization error        }        else{            System.loadLibrary("my_jni_lib1");            System.loadLibrary("my_jni_lib2");        }   }

这段代码表示,如果OpenCV加载成功,则在logcat日志中显示OpenCV successfully loaded.否则,显示OpenCV not loaded.

3.2Android Studio下方选中Android Monitor,然后在Android Monitor窗口中右上角选择Edit Filter Configuration,出现Create New logcat Filter,内容填写如下图所示:

Android Studio 2.2 + OpenCV3.4.1_4_Android_Sdk环境配置_第25张图片

3.3最后,先运行一个Android模拟器,然后点击Run app按钮,即可显示出下图内容

四步,图片灰度化测试程序

4.1下载一张图片(不要太大,300x300即可复制粘贴到res/drawable目录下,如图:

Android Studio 2.2 + OpenCV3.4.1_4_Android_Sdk环境配置_第26张图片

4.2修改MainActivity.java中的代码:

package com.example.cvlab.opencvtest;


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;


import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;


public class MainActivity extends Activity {
//    static{
//        if(!OpenCVLoader.initDebug()){
//            //handle initialization error
//        }
//        else{
//            System.loadLibrary("my_jni_lib1");
//            System.loadLibrary("my_jni_lib2");
//        }
//    }


    private Button btn;
    private ImageView img;


    private Bitmap srcBitmap;
    private Bitmap grayBitmap;
    private static boolean flag = true;
    private static boolean isFirst = true;
    private static final String TAG = "gao_chun";




    @Override
    protected void onCreate(Bundle savedInstanceState) {


        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_opencv);


        img = (ImageView)findViewById(R.id.img);
        btn = (Button)findViewById(R.id.btn);
        btn.setOnClickListener(new ProcessClickListener());
    }




    @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_3_0_0, this, mLoaderCallback);
        } else {
            Log.d(TAG, "OpenCV library found inside package. Using it!");
            mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS);
        }
    }




    //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;
            }
        }
    };






    public void procSrc2Gray(){
        Mat rgbMat = new Mat();
        Mat grayMat = new Mat();
        srcBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.img1);
        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...");
    }




    public 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);
                btn.setText("查看原图");
                flag = false;
            }else{
                img.setImageBitmap(srcBitmap);
                btn.setText("灰度化");
                flag = true;
            }
        }
    }


}

4.3创建一个activity_opencv.xml,内容为:

    android:layout_width="match_parent"
    android:layout_height="match_parent">


   
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:text="OpenCV"/>


   
        android:id="@+id/img"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:background="@drawable/img1"/>


   

你可能感兴趣的:(Android Studio 2.2 + OpenCV3.4.1_4_Android_Sdk环境配置)