zoukankan      html  css  js  c++  java
  • Android Studio配置和使用OpenCV3.x,不需要OpencvManager

    转载声明,本文转自CSDN:http://blog.csdn.net/qq_22033759/article/details/51156121

    ps:本来在贴吧上有人问,想自己写的,但时间有限,当初自己也是学习了这个CSDN博文后配置的,一为了收藏,二为了让更多朋友搜索到,就转载一下。。。

    以下为转载原文:

    我所使用的opencv版本为3.1,Android Studio版本为2.0

    先从opencv官网下载对应的版本的安卓的opencv的sdk 解压出来路径不要有中文

    然后在Android Studio里创建一个安卓项目,在根目录创建一个文件夹,命名为libraries
    这里写图片描述
    然后把sdk结业目录下的 sdkJava文件夹复制到libraries文件夹内,重命名为opencv
    这里写图片描述
    接着在该opencv目录下创建一个build.gradle,内容为

    apply plugin: 'com.android.library'
    
    buildscript {
        repositories {
            mavenCentral()
        }
        dependencies {
            classpath 'com.android.tools.build:gradle:2.0.0'
        }
    }
    
    android {
        compileSdkVersion 23
        buildToolsVersion "23.0.3"
    
        defaultConfig {
            minSdkVersion 21
            targetSdkVersion 23
            versionCode 2480
            versionName "3.1.0"
        }
    
        sourceSets {
            main {
                manifest.srcFile 'AndroidManifest.xml'
                java.srcDirs = ['src']
                resources.srcDirs = ['src']
                res.srcDirs = ['res']
                aidl.srcDirs = ['src']
            }
        }
    }
    
     

    需要依照需求修改对应的sdk版本

    然后在修改下项目的settings.gradle ,添加一行

    include ':libraries:opencv'
    

    要选择Sync Now

    然后右键项目名,选择Open Module Settings,选择app然后点Dependencies,再点击加号,选第三个,把opencv添加进去
    添加好后如图:
    这里写图片描述

    接着在/app/src/main/下创建一个文件夹叫jniLibs
    这里写图片描述
    把上图目录下的所有文件夹都复制到jniLibs中去。
    到这就算是配置完全了。
    接下来就是使用。

    一定要先添加static{ System.loadLibrary(“opencv_java3”); }

    我测试的代码:(界面有一个ImageView和一个Button)

    package com.example.chengk.opencvexamples;
    
    import android.graphics.Bitmap;
    import android.graphics.drawable.BitmapDrawable;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.ImageView;
    
    import org.opencv.android.Utils;
    import org.opencv.core.Mat;
    import org.opencv.imgproc.Imgproc;
    
    public class MainActivity extends AppCompatActivity {
        static{ System.loadLibrary("opencv_java3"); }
        int i=0;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            ImageView imageView = (ImageView)findViewById(R.id.imageView);
            final Bitmap bitmap = ((BitmapDrawable) getResources().getDrawable(R.drawable.aa1)).getBitmap();
            imageView.setImageBitmap(bitmap);
    
    
            final Button button2 = (Button)findViewById(R.id.button);
            button2.setText("转换");
            button2.setOnClickListener(new Button.OnClickListener()
            {
                @Override
                public void onClick(View v)
                {
                    i++;
                    Mat rgbMat = new Mat();
                    Mat grayMat = new Mat();
                    //获取lena彩色图像所对应的像素数据
                    Utils.bitmapToMat(bitmap, rgbMat);
                    //将彩色图像数据转换为灰度图像数据并存储到grayMat中
                    Imgproc.cvtColor(rgbMat, grayMat, Imgproc.COLOR_RGB2GRAY);
                    //创建一个灰度图像
                     Bitmap grayBmp = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.RGB_565);
                    //将矩阵grayMat转换为灰度图像
                    Utils.matToBitmap(grayMat, grayBmp);
                    ImageView imageView = (ImageView)findViewById(R.id.imageView);
                    if(i%2==1)
                        imageView.setImageBitmap(grayBmp);
                    else
                        imageView.setImageBitmap(bitmap);
                }
    
            });
        }
    }
    

    运行效果图:
    点击按钮前
    这里写图片描述
    点击按钮后
    这里写图片描述

    这么做确实是可行的,但空间占用太大,我这个程序占用空间将近50M,还在寻找其他更好的办法,找到了继续更新。

  • 相关阅读:
    MacOS安装mysql
    让终端命令走代理
    T265输出深度图
    windows分离系统文件和用户数据
    Python UnicodeDecodeError
    【转载】小米2进入recovery的方法
    【转载】如何更容易地打开小米手机后盖
    quote、cite、refer的区别
    python idle 清屏问题的解决
    System占用端口80
  • 原文地址:https://www.cnblogs.com/jcjks/p/6097207.html
Copyright © 2011-2022 走看看