您的位置:首页 > 移动开发 > Android开发

Android OPenCV 环境配置 <1>

2016-04-01 18:36 531 查看
参照网上面的很多关于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这个包和里面的类文件,这个是不需要的.



注意:

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

CameraBridgeViewBase
CameraGLSurfaceView

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

比如:

import org.durian.durianjaveopencv.R;


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

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

<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name = "CameraBridgeViewBase" >
<attr name="show_fps" format="boolean"/>
<attr name="camera_id" format="integer" >
<enum name="any" value="-1" />
<enum name="back" value="99" />
<enum name="front" value="98" />
</attr>
</declare-styleable>
</resources>
上面的内容其实也是opencv SDK里面的,库带View类就有这么坑爹!

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




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

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

OpenCVEngineInterface.aidl接口.




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

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

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



<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库.


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: