在Android Studio上使用OpenCV:

1、进入OpenCV官网(不用):【https://opencv.org/】:


2、选择RELEASES,可以看见各个版本,根据你的需求下载,这里我选择最新版3.4.0,点击Android pack进入下载页面:



3、下载完成后解压,我们主要用到sdk文件夹:


4、新建一个空项目,然后Android Studio菜单-->File-->New-->Import Module
1)选择刚刚的sdk文件夹下的java文件夹;
2)Module name: Android studio会自动填充这项为openCVLibrary340 ,不用管它;
3)点击下一步,会出现三个复选框,都选上,点击Finish。


5、加入依赖
1)File-->Project Structure;
2)左边Modules栏下选择app;
3)在右边上面一栏中选择Dependencies ;
4)点击右边栏中的“+”,选择第三个Module Dependency;
5)点击ok退出,然后再点击ok退出;
6)点击app,打开app根目录下的build.gradle文件,记下
compileSdkVersion
buildToolsVersion
minSdkVersion
targetSdkVersion
然后点击openCVLibrary340,打开根目录下的build.gradle文件,把文件中
compileSdkVersion
buildToolsVersion
minSdkVersion
targetSdkVersion
后的数值改成app中一样的。


6、在app/src/main下新建文件夹jniLibs,将我们下载的OpenCV-android-sdk的sdk/native/libs下的所有文件拷贝到jniLibs下。


至此我们已经可以使用Opencv相关的功能了。


测试:



activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>    
MainActivity.java:
package com.example.opencvdemo;import android.content.Intent;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.net.Uri;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.OpenCVLoader;import org.opencv.android.Utils;import org.opencv.core.CvType;import org.opencv.core.Mat;import org.opencv.imgproc.Imgproc;import java.io.InputStream;public class MainActivity extends AppCompatActivity {    private double max_size = 1024;    private int PICK_IMAGE_REQUEST = 1;    private ImageView myImageView;    private Bitmap selectbp;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        staticLoadCVLibraries();        myImageView = (ImageView)findViewById(R.id.imageView);        myImageView.setScaleType(ImageView.ScaleType.FIT_CENTER);        Button selectImageBtn = (Button)findViewById(R.id.select_btn);        selectImageBtn.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                // makeText(MainActivity.this.getApplicationContext(), "start to browser image", Toast.LENGTH_SHORT).show();                selectImage();            }        });        Button processBtn = (Button)findViewById(R.id.process_btn);        processBtn.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                // makeText(MainActivity.this.getApplicationContext(), "hello, image process", Toast.LENGTH_SHORT).show();                convertGray();            }        });    }    //OpenCV库静态加载并初始化    private void staticLoadCVLibraries(){        boolean load = OpenCVLoader.initDebug();        if(load) {            Log.i("CV", "Open CV Libraries loaded...");        }    }    private void convertGray() {        Mat src = new Mat();        Mat temp = new Mat();        Mat dst = new Mat();        Utils.bitmapToMat(selectbp, src);        Imgproc.cvtColor(src, temp, Imgproc.COLOR_BGRA2BGR);        Log.i("CV", "image type:" + (temp.type() == CvType.CV_8UC3));        Imgproc.cvtColor(temp, dst, Imgproc.COLOR_BGR2GRAY);        Utils.matToBitmap(dst, selectbp);        myImageView.setImageBitmap(selectbp);    }    @Override    protected void onActivityResult(int requestCode, int resultCode, Intent data) {        super.onActivityResult(requestCode, resultCode, data);        if(requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data != null && data.getData() != null) {            Uri uri = data.getData();            try {                Log.d("image-tag", "start to decode selected image now...");                InputStream input = getContentResolver().openInputStream(uri);                BitmapFactory.Options options = new BitmapFactory.Options();                options.inJustDecodeBounds = true;                BitmapFactory.decodeStream(input, null, options);                int raw_width = options.outWidth;                int raw_height = options.outHeight;                int max = Math.max(raw_width, raw_height);                int newWidth = raw_width;                int newHeight = raw_height;                int inSampleSize = 1;                if(max > max_size) {                    newWidth = raw_width / 2;                    newHeight = raw_height / 2;                    while((newWidth/inSampleSize) > max_size || (newHeight/inSampleSize) > max_size) {                        inSampleSize *=2;                    }                }                options.inSampleSize = inSampleSize;                options.inJustDecodeBounds = false;                options.inPreferredConfig = Bitmap.Config.ARGB_8888;                selectbp = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri), null, options);                myImageView.setImageBitmap(selectbp);            } catch (Exception e) {                e.printStackTrace();            }        }    }    private void selectImage() {        Intent intent = new Intent();        intent.setType("image/*");        intent.setAction(Intent.ACTION_GET_CONTENT);        startActivityForResult(Intent.createChooser(intent,"选择图像..."), PICK_IMAGE_REQUEST);    }}


参考:【Android Studio不安装opencv manager配置】 https://jingyan.baidu.com/article/60ccbceb53533364cab197db.html
【在Android Studio 2.2上集成OpenCV4Android SDK】

http://blog.csdn.net/PZ0605/article/details/72778547

【GitHub上的项目:目标检测&目标追踪&人脸检测&人脸识别】https://github.com/kongqw/OpenCVForAndroid

更多相关文章

  1. PopupWindow setOutsideTouchable 问题
  2. 【Android】- 搭建服务器进行前后端的交互
  3. android图像绘制(六)——获取本地图片或拍照图片
  4. Android(安卓)TextView实现点击展开动画效果
  5. android 拍照或者图库选择 压缩后 图片 上传
  6. Android常用UI之Spinner
  7. android使用datepicker计算年龄
  8. Android(安卓)获取系统程序和应用程序
  9. 安卓如何创建右上角点击菜单

随机推荐

  1. android踩坑日记
  2. Android JNI开发工具篇(1)-开发环境搭建
  3. android_tips
  4. Android:用DialogFragment实现LoadingDial
  5. Android AsyncTask 源码分析详解
  6. android基础学习--->Android(安卓)Shared
  7. Android SQLiteOpenHelper Sqlite数据库
  8. Mac下关于The "android" command is depr
  9. android RSA和Java RSA加密不一致的坑
  10. android配置X86虚拟机