【MediaTek X20开发板试用体验】6.MTX20开发板Android Studio+Opencv310  

分享到:

xble
 xble
Level 1
注册时间:7年 前
帖子数: 15
2017年3月14日 上午9:30  

Android下使用Opencv有三种方式:OpenCVManager、OpencvLibrary和JNI方式。第一种方法需要将Opencv的APK加载到系统中,这样的操作方式只能自己测试一下而已。
第三种方法则需要对Opencv比较熟悉。我们这里先来试试第二种方法。
步骤0:默认在windows下已经安装好了Android Studio2.2。
步骤1:下载android版本OpenCV的sdk,我这里下载OpenCV-3.1.0-android-sdk。下载 ,解压即可。
步骤2:使用Android Studio新建一个工程MyOpencv310,不支持NDK的工程。
 
 
将OpenCV-3.1.0-android-sdk加载到工程中。
 
 

修改MyOpencv310和openCVLibrary310目录下的build.gradle文件,对其中buildToolsVersion、compileSdkVwesion进行必要修改,以便编译过去。
 
 
 
 

步骤3:将OpenCV-3.1.0-android-sdk下的libs文件夹拷贝到MyOpencv310下的app目录下,并改名为opencv310_libs,将下面的代码添加到MyOpencv310下的build.gradle文件中。

  1. sourceSets {
  2.         main {
  3.           jniLibs.srcDirs=['F:\\MediaTekX20\\opencv-project\\MyOpencv310\\app\\src\\main\\opencv310_libs']
  4.         }
  5.     }

复制代码

步骤4:添加openCVLibrary310模块
 
步骤5:准备测试图片happyfish.jpg注意名字里面不能有大写字母
 
步骤6:layout界面设计

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3.     xmlns:app="http://schemas.android.com/apk/res-auto"
  4.     xmlns:tools="http://schemas.android.com/tools"
  5.     android:id="@+id/activity_main"
  6.     android:layout_width="match_parent"
  7.     android:layout_height="match_parent"
  8.     android:paddingBottom="@dimen/activity_vertical_margin"
  9.     android:paddingLeft="@dimen/activity_horizontal_margin"
  10.     android:paddingRight="@dimen/activity_horizontal_margin"
  11.     android:paddingTop="@dimen/activity_vertical_margin"
  12.     tools:context="com.example.administrator.myopencv310.MainActivity">
  13.     <TextView
  14.         android:layout_width="wrap_content"
  15.         android:layout_height="wrap_content"
  16.         android:text="Hello World! =0001=" />
  17.     <ImageView
  18.         android:layout_width="wrap_content"
  19.         android:layout_height="wrap_content"
  20.         android:layout_alignParentBottom="true"
  21.         android:layout_alignParentEnd="true"
  22.         android:layout_marginEnd="75dp"
  23.         android:layout_marginBottom="163dp"
  24.         android:id="@+id/imageView217" />
  25.     <Button
  26.         android:text="Button"
  27.         android:layout_width="wrap_content"
  28.         android:layout_height="wrap_content"
  29.         android:layout_alignParentBottom="true"
  30.         android:layout_alignParentEnd="true"
  31.         android:layout_marginEnd="44dp"
  32.         android:layout_marginBottom="46dp"
  33.         android:id="@+id/button217" />
  34. </RelativeLayout>

复制代码

步骤7:MainActivity.java代码

  1. package com.example.administrator.myopencv310;
  2. import android.graphics.Bitmap;
  3. import android.graphics.BitmapFactory;
  4. import android.support.v7.app.AppCompatActivity;
  5. import android.os.Bundle;
  6. import android.util.Log;
  7. import android.view.View;
  8. import android.widget.Button;
  9. import android.widget.ImageView;
  10. import org.opencv.android.BaseLoaderCallback;
  11. import org.opencv.android.LoaderCallbackInterface;
  12. import org.opencv.android.OpenCVLoader;
  13. import org.opencv.android.Utils;
  14. import org.opencv.core.Mat;
  15. import org.opencv.imgproc.Imgproc;
  16. public class MainActivity extends AppCompatActivity {
  17.     private static String TAG = "MyOpencv310";
  18.     static {
  19.         if (OpenCVLoader.initDebug()) {
  20.             Log.i(TAG, "OpenCV310 initialize success");
  21.         } else {
  22.             Log.i(TAG, "OpenCV310 initialize failed");
  23.         }
  24.     }
  25.         Button btnProcess;
  26.     Bitmap srcBitmap;
  27.     Bitmap grayBitmap;
  28.     ImageView imgHuaishi;
  29.     private static boolean flag = true;
  30.     //private static boolean isFirst = true;
  31.     //OpenCV库加载并初始化成功后的回调函数
  32.     private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
  33.         @Override
  34.         public void onManagerConnected(int status) {
  35.             // TODO Auto-generated method stub
  36.             switch (status){
  37.                 case BaseLoaderCallback.SUCCESS:
  38.                     Log.i(TAG, "成功加载");
  39.                     break;
  40.                 default:
  41.                     super.onManagerConnected(status);
  42.                     Log.i(TAG, "加载失败");
  43.                     break;
  44.             }
  45.         }
  46.     };
  47.     @Override
  48.     protected void onCreate(Bundle savedInstanceState) {
  49.         super.onCreate(savedInstanceState);
  50.         setContentView(R.layout.activity_main);
  51.         initUI();
  52.         btnProcess.setOnClickListener(new ProcessClickListener());
  53.     }
  54.     public void initUI(){
  55.         btnProcess = (Button)findViewById(R.id.button217);
  56.         imgHuaishi = (ImageView)findViewById(R.id.imageView217);
  57.         Log.i(TAG, "initUI sucess...");
  58.     }
  59.     public void procSrc2Gray(){
  60.         Mat rgbMat = new Mat();
  61.         Mat grayMat = new Mat();
  62.         srcBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.happyfish);
  63.         grayBitmap = Bitmap.createBitmap(srcBitmap.getWidth(), srcBitmap.getHeight(), Bitmap.Config.RGB_565);
  64.         Utils.bitmapToMat(srcBitmap, rgbMat);//convert original bitmap to Mat, R G B.
  65.         Imgproc.cvtColor(rgbMat, grayMat, Imgproc.COLOR_RGB2GRAY);//rgbMat to gray grayMat
  66.         Utils.matToBitmap(grayMat, grayBitmap); //convert mat to bitmap
  67.         Log.i(TAG, "procSrc2Gray sucess...");
  68.     }
  69.     private class ProcessClickListener implements View.OnClickListener {
  70.         @Override
  71.         public void onClick(View v) {
  72.             // TODO Auto-generated method stub
  73. //            if(isFirst)
  74. //            {
  75.             procSrc2Gray();
  76. //                isFirst = false;
  77. //            }
  78.             if(flag){
  79.                 imgHuaishi.setImageBitmap(grayBitmap);
  80.                 btnProcess.setText("查看原图");
  81.                 flag = false;
  82.             }
  83.             else{
  84.                 imgHuaishi.setImageBitmap(srcBitmap);
  85.                 btnProcess.setText("灰度化");
  86.                 flag = true;
  87.             }
  88.         }
  89.     }
  90.     @Override
  91.     public void onResume()
  92.     {
  93.         super.onResume();
  94.         if (!OpenCVLoader.initDebug()) {
  95.             Log.d(TAG, "Internal OpenCV library not found. Using OpenCV Manager for initialization");
  96.             OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_0_0, this, mLoaderCallback);
  97.         } else {
  98.             Log.d(TAG, "OpenCV library found inside package. Using it!");
  99.             mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS);
  100.         }
  101.     }
  102. }

复制代码

编译运行结果:
 
 


DragonCat liked
回复引用
  
Working

登陆 或者 注册