Android OPenCV 环境配置

参照网上面的很多关于Android 使用OpenCV的,虽然有一些讲的也比较详细,但是按照套路来,似乎不成功!


搭建环境: Android Studio 2.0 + OpenCV-Android-master.zip(这个是3.0版本的,官网上面可以下载,要下载for Android的版本)+NDK(android-ndk-r10,至少大于等于r9)

使用OpenCV SDK里面的sample都需要opencvManager.apk这个管理apk支持,所以在运行那些sample的时候,首先需要安装这个管理器APK.

下面给出不需要安装管理器APK的方式,如果使用OpenCV 库.

步骤如下:

使用JAVA版本:

<1> : 新建一个android 工程,新建了以后将OpenCV SDK:

E:\liuzhibao\libaray\OpenCV-android-sdk\sdk\java\src
这个路径下的所有源代码拷贝到你的工程src根目录下,然后在删除org.opencv.engine这个包和里面的类文件,这个是不需要的.

Android OPenCV 环境配置_第1张图片

注意:

拷贝了上面的opencv SDK java目录下库,但是如果大致看过库的结构和内容,发现这个库里面即org.opencv.android包下面居然有两个View类:

CameraBridgeViewBase
CameraGLSurfaceView

这两个要提供R.java的文件路径,里面的默认路径是import org.opencv.R,要将这个改到新建工程R的路径:

比如:

import org.durian.durianjaveopencv.R;
Android OPenCV 环境配置_第2张图片

另外一个类推,也需要调整,这样这个类库的java就没有错误了!


不过还是发现View里面又少了几个attrs属性值,靠! 继续在工程values目录下新建一个attrs.xml的文件:



    
       
       
          
          
          
       
    

上面的内容其实也是opencv SDK里面的,库带View类就有这么坑爹!

E:\liuzhibao\libaray\OpenCV-android-sdk\sdk\java\res\values

Android OPenCV 环境配置_第3张图片


<2> : 在工程里面新建一个aidl文件夹,然后再aidl文件夹中新建一个包:

org.opencv.engine
因为是aidl接口的,所以报名是一定不能够随便改的,所以这个是固定的,也可以去参考org.opencv.engine下面的接口类.然后在aidl接口中新建一个

OpenCVEngineInterface.aidl接口.

Android OPenCV 环境配置_第4张图片

<3> : 由于是使用java层的opencv,那么就还需要导入opencv sdk 中的so库 在工程src/main下面新建一个jniLibs的目录,这个目录可以随便改,然后将opencv SDK目录下

E:\liuzhibao\libaray\OpenCV-android-sdk\sdk\native\libs

对应所需要的文件夹(当然包含文件夹里面的内容)拷贝到jniLibs目录下.

Android OPenCV 环境配置_第5张图片

<4> : 修改grade配置文档:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.1"

    defaultConfig {
        applicationId "org.durian.durianjaveopencv"
        minSdkVersion 21
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    sourceSets.main.jni.srcDirs = []
    //禁止自带的ndk功能
    sourceSets.main.jniLibs.srcDirs = ['src/main/libs','src/main/jniLibs']
    //重定向so目录为src/main/jniLibs,原来为src/main/libs

}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.2.1'
}
添加上面下面带中文的两句就可以了,其中jniLibs是前面新建的,如果使用者不是这个名字,可以自行调整.

<5> : 上面基本配置好了就可以开始开发主工程了:

package org.durian.durianjaveopencv;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
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.Mat;
import org.opencv.imgproc.Imgproc;

public class DurianMainActivity extends Activity implements View.OnClickListener{

    private Button mButton;
    private ImageView mImage;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_durian_main);

        mButton=(Button)findViewById(R.id.javabutton);
        mButton.setOnClickListener(this);
        mImage=(ImageView)findViewById(R.id.image);

    }

    @Override
    public void onClick(View v) {

        int id=v.getId();
        switch (id){
            case R.id.javabutton:

                OpenCVLoader.initDebug();
                Mat rgbMat = new Mat();
                Mat grayMat = new Mat();
                Bitmap srcBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.linr);
                Bitmap 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
                mImage.setImageBitmap(grayBitmap);

                break;
        }

    }
}

当然在drawable目录下放一张linr.png的图片.


反复检查了一下上面的步骤,发现不少什么了,运行程序,点击按钮,图片置灰了.


下面搞一下如何使用native(jni)来达到使用opencv库.




















你可能感兴趣的:(Android,OpenCV)