参照网上面的很多关于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;
_第1张图片" src="https://img.it610.com/image/info5/1d78a6ba38f246c281b756ff77dd16e3.jpg" width="427" height="269" style="border:1px solid black;">

另外一个类推,也需要调整,这样这个类库的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张图片" src="https://img.it610.com/image/info5/160a7dc1a59446a7a0a6bf2ca103722a.jpg" width="280" height="233" style="border:1px solid black;">


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

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

OpenCVEngineInterface.aidl接口.

_第3张图片" src="https://img.it610.com/image/info5/8ab480b8c46e4cc7bcbd02ae117cd759.jpg" width="240" height="124" style="border:1px solid black;">

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


















更多相关文章

  1. 【Android(安卓)基础】之 ImageView 的 scaleType 属性
  2. android中画廊视图Gallery和ImageSwitcher组件的使用
  3. Android(安卓)Universal-Iamge-Loader的DisplayImageOptions
  4. 9.Swift UIImagePickerController选取图片
  5. Android加载GIF图片的两种方式
  6. 过滤Android(安卓)Studio的[libpng error: Not a PNG file Error
  7. 关于Android的屏幕适配,看这篇就够了
  8. Android(安卓)Paint之PathEffect(路径效果)
  9. Qt On Android(安卓)+ protobuf3的使用

随机推荐

  1. linux安装apache/mysql/php的最新完整方
  2. 高性能Mysql——创建高性能的索引
  3. Mysql语句 AND 和 OR 的运用
  4. jsp+tomcat+mysql配置全过程&nbsp;和mys
  5. 如何从mysql datetime列返回转换后的时间
  6. 通达OA 同步中控考勤机 增强版
  7. MAC 环境下初始化mysql root 密码
  8. Mysql迁移由于字符集导致乱码的数据
  9. [MySQL] 高可用架构MMM简单介绍
  10. 连接相关标签的最佳数据库设计