OpenCV2.4.9 For Android + Android Studio (with gradle)配置教程 10 回复 / 9501 浏览

本页底部本帖地址

4king2 年前 - 2014-12-22 18:05 /0
好久没来科创了,现在荒凉好多啊- -。 发一篇教程提高下访问~
原文在我博客

OpenCV的配置一直是个最麻烦的问题,2.4.6以后windows环境下 vs配置我就出错好几十次,来来回回弄了好多遍
之前在实验室弄,为了配合其他人才用的vs2010,现在蹲宿舍干了,改用更简洁的Qt了,qt配置OPENCV方便很多,几句话就搞定了。

人机交互的作业是写一个以图搜图的demo,之前虽然在实验室干过类似的东西,但是现在又得用安卓配置OpenCV了,又是麻烦了我一整天。前几天终于成了,记录一下。

配置环境的过程参考了http://stackoverflow.com/questions/17767557/how-to-use-opencv-in-android-studio-using-gradle-build-tool
demo的编写参考了 http://blog.csdn.net/yanzi1225627/article/details/16917961
由于其resume后图片会消失,我做了点改动

1.准备工作

首先安装好Android Studio,要自带所有开发套件的,感觉AS比Intellij+ ADT ,eclipse系列都要好,虽然也想过Qt开发安卓,但是太小众了,不好跟人交流。
然后,保证所有环境变量配置正确,比如 JDK ADT JRE等等等等。

下载 OpenCV Android SDK ,我下的2.4.9,鉴于目前3。0无安卓sdk,2.4.10我也不敢用了,并将下载的OpenCV-2.4.9-android-sdk中的sdk文件夹中的java文件夹 重命名为 opencv

2.创建你的安卓项目(使用gradle,非gradle的教程网上资料很多)在你的工程根目录下new一个文件夹,名字任意比如libraries ,将刚才的opencv文件夹整个复制到新建的libraries里面。

3. 在android studio中,在opencv的根目录处新建一个 build.gradle文件,复制以下代码

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

注意其中的versionName 改为你自己下载的OpenCV的版本号,compileSdkVersion和minSdkVersion和targetSdkVersion要和你..\工程名\app\目录下的build.gradle中的设置一样

    dependencies {  
        classpath 'com.android.tools.build:gradle:1.0.0'
中的gradle版本要和你工程根目录下的build.gradle(不是app下的)中的版本一样,

关于gradle文件的解释如下
http://www.cnblogs.com/youxilua/archive/2013/05/20/3087935.html

4.在工程根目录的 settings.gradle 中添加以下代码,改动之后会提示你需要sync,点sync now

include ':libraries:opencv'  

5.在你需要用到opencv的model的/src/main文件夹下新建一个jniLibs文件夹。将刚才下载的OpenCV-2.4.9-android-sdk/sdk/native/libs中的文件拷贝进来。 就是各种.so .a文件,相当于win下的dll文件,程序靠引用这些动态链接库工作。另外一点就是,libs下的文件夹不一定要全部复制,根据你运行的平台复制对应的文件夹即可,对应关系如图,也跟之后的OpenCV Manager有关 (版本号自行对应)

6.在刚才..工程名\app\ 目录下的build.gradle 中的dependency下添加以下代码

compile project(':libraries:opencv')    

该sync now的都sync 就可以开始编写你的程序了

7.灰度化demo

首先看下opencv官网的流程图http://docs.opencv.org/platforms/android/service/doc/UseCases.html

从2.4之后,为了和Android的系统架构保持同步,准确说是吸收Android框架层的优点,引入了OpenCV Manager的概念,其本质就是一个Service,用来管理OpenCV动态链接库(即你之前拷贝的那个jniLibs里的东西)。

APP在运行时会首先检查OpenCV Manager存在不,如果不存在则会提示安装。如果存在,就会连接这个服务,进一步初始化加载OpenCV库。  所以第一步就是先在你的目标手机上安装 OpenCV Manager ,apk在 ..\OpenCV-2.4.9-android-sdk\apk 下版本对应之前的图。

具体的代码跟http://blog.csdn.net/yanzi1225627/article/details/16917961 没什么不同,这里只提两点。

public class MyActivity extends Activity implements HelperCallbackInterface
{
private BaseLoaderCallback mOpenCVCallBack = new BaseLoaderCallback(this) {@Overridepublic void onManagerConnected(int status) {switch (status) {case LoaderCallbackInterface.SUCCESS:{Log.i(TAG, "OpenCV loaded successfully");// Create and set ViewmView = new puzzle15View(mAppContext);setContentView(mView);} break;default:{super.onManagerConnected(status);} break;}}
};/** Call on every application resume **/
@Override
protected void onResume()
{Log.i(TAG, "Called onResume");super.onResume();Log.i(TAG, "Trying to load OpenCV library");if (!OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_6, this, mOpenCVCallBack)){Log.e(TAG, "Cannot connect to OpenCV Manager");}
}

以上截取官方文档http://docs.opencv.org/platforms/android/service/doc/BaseLoaderCallback.html

任何opencv项目都需要这两个步骤,在initAsync 加载OpenCV Library 所有其他的操作必须在这一步成功之后才能执行。

我最后的程序被ADT自带的虚拟机坑了好久,再次告诫各位不要用AVD,只要不用AVD应该都会成功~

附demo代码:

package com.example.ras.myapplication;import org.opencv.android.BaseLoaderCallback;
import org.opencv.android.OpenCVLoader;
import org.opencv.android.Utils;
import org.opencv.core.Mat;
import org.opencv.imgproc.Imgproc;import android.support.v7.app.ActionBarActivity;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageView;
import android.widget.Button;
import android.widget.TextView;public class MainActivity extends ActionBarActivity {Button btnProcess;Bitmap srcBitmap;Bitmap grayBitmap;Bitmap MaskBitmap;ImageView imgLena;TextView OpCVversion;private static final String TAG = "MainActivity";private static boolean flag = true;private static boolean isFirst = true;                      // Greyprivate BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {@Overridepublic void onManagerConnected(int status) {// TODO Auto-generated method stubswitch (status) {case BaseLoaderCallback.SUCCESS:Log.i(TAG, "Load success");break;default:super.onManagerConnected(status);Log.i(TAG, "Load fail");break;}}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initUI();btnProcess.setOnClickListener(new ProcessClickListener());}public void initUI(){btnProcess = (Button)findViewById(R.id.button);imgLena = (ImageView)findViewById(R.id.imageView);OpCVversion = (TextView)findViewById(R.id.textView3);OpCVversion.setText("Ver: " + OpenCVLoader.OPENCV_VERSION_2_4_9);Log.i(TAG, "initUI sucess...");}public void procSrc2Gray(){Mat rgbMat = new Mat();Mat grayMat = new Mat();srcBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.lena);grayBitmap = Bitmap.createBitmap(srcBitmap.getWidth(), srcBitmap.getHeight(), 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 grayMatUtils.matToBitmap(grayMat, grayBitmap); //convert mat to bitmapLog.i(TAG, "procSrc2Gray sucess...");}private class ProcessClickListener implements OnClickListener{@Overridepublic void onClick(View v) {// TODO Auto-generated method stubif(isFirst){procSrc2Gray();isFirst = false;}if(flag){imgLena.setImageBitmap(grayBitmap);btnProcess.setText("Origin");flag = false;}else{imgLena.setImageBitmap(srcBitmap);btnProcess.setText("Grey");flag = true;}}}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.menu_main, menu);return true;}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {// Handle action bar item clicks here. The action bar will// automatically handle clicks on the Home/Up button, so long// as you specify a parent activity in AndroidManifest.xml.int id = item.getItemId();//noinspection SimplifiableIfStatementif (id == R.id.action_settings) {return true;}return super.onOptionsItemSelected(item);}@Overrideprotected void onResume() {// TODO Auto-generated method stubsuper.onResume();//load OpenCV engine and init OpenCV libraryisFirst = true;OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_9, this, mLoaderCallback);Log.i(TAG, "onResume sucess load OpenCV...");}
}

[修改于 2 年前 - 2014-12-22 20:17:17]


12112 年前 - 2014-12-22 18:33 /1
请编辑帖子把图片上传一下,感谢哦~~


4king2 年前 - 2014-12-22 18:37 /2

引用 1211:
请编辑帖子把图片上传一下,感谢哦~~

哦,没注意防盗链- -


darkorochi2 年前 - 2014-12-22 19:57 /3
都2.4.9了啊。。。。。


4king2 年前 - 2014-12-22 20:07 /4

引用 darkorochi:
都2.4.9了啊。。。。。

最新的3.0.0beta


11767641772 年前 - 2014-12-22 22:09 /5
这就是传说中的安卓开发环境搭建?

我查的方法得在谷歌下一堆东西必须翻墙。
咋办。。
ide用啥好用捏
c艹作为编程语言如何??


金星凌日2 年前 - 2014-12-22 22:20 /6

引用 1176764177:
这就是传说中的安卓开发环境搭建?

我查的方法得在谷歌下一堆东西必须翻墙。
咋办。。
ide用啥好用捏
c艹作为编程语言如何??

Android应用一般用Java开发,不过C++也可以用。


4king2 年前 - 2014-12-22 23:42 /7

引用 1176764177:
这就是传说中的安卓开发环境搭建?

我查的方法得在谷歌下一堆东西必须翻墙。
咋办。。
ide用啥好用捏
c艹作为编程语言如何??

IDE可以Android Studio毕竟是谷歌官方的,也可以Intellij + ADT 也可以eclipse + ADT
也可以NDT + 别的东西


张静茹2 年前 - 2014-12-23 14:25 /8

引用 4king:
IDE可以Android Studio毕竟是谷歌官方的,也可以Intellij + ADT 也可以eclipse + ADT
也可以NDT + 别的东西

visual stodio好像也能开发安卓了,楼主可以试试呀


11767641772 年前 - 2014-12-23 16:43 /9

引用 张静茹:
visual stodio好像也能开发安卓了,楼主可以试试呀

好像是英文的不知道安装在中文的vs13下会咋样


4king2 年前 - 2014-12-25 17:04 /10

引用 张静茹:
visual stodio好像也能开发安卓了,楼主可以试试呀

这不是科创女神吗,我是微软黑, VS不考虑

OpenCV2.4.9 For Android + Android Studio (with gradle)配置教程相关推荐

  1. Mac下Android studio 之NDK配置教程(一)

    Mac下Android studio 之NDK配置教程(一) 1.概述 近期项目全线转移到Mac下使用使用Android studio开发. 遇到关键代码封装到 ***native***层,此时在wi ...

  2. Mac下Android studio 之NDK配置教程(二)

    Mac下Android studio 之NDK配置教程(二) (一)简述 从上一篇NDK配置教程(一) 中,我 简单的阐述了MAC下NDK的基本解压和环境配置步骤. 本节我讲详细描述android s ...

  3. 【沁恒WCH CH32V307V-R1在MounRiver Studio上环境配置教程】

    [沁恒WCH CH32V307V-R1在MounRiver Studio上环境配置教程] 1. 前言 2. 软件配置 2.1 安装MounRiver Studio 3. 点灯项目测试 3.1 打开点灯 ...

  4. 【沁恒WCH CH32V307V-R1在RT-Thread Studio上环境配置教程】

    [沁恒WCH CH32V307V-R1在RT-Thread Studio上环境配置教程] 1. 前言 2. 软件配置 2.1 安装RT-Thread Studio 2.2 RT-Thread Stud ...

  5. android studio 中 gradle 配置与说明

    首先在android studio中,gradle工具版本和gradle版本(或者插件版本).gradle工具版本就是我们安装android studio的时候,同时也会安装gradle工具版本,因为 ...

  6. android studio 的gradle配置

    android studio的gradle 设置如下 "project-level settings"选择gradle是采用默认的即网上下载的还是选择本地即离线安装包.这里我们一般 ...

  7. Android Studio build.gradle配置详解

    Android Studio是采用gradle来构建项目的,gradle是基于groovy语言的,如果只是用它构建普通Android项目的话,是可以不去学groovy的.当我们创建一个Android项 ...

  8. win10环境下Android SDK下载安装及配置教程

    最近在配置Android环境时,发现网上许多教程都是在win7版本下进行配置的且存在许多问题,按照流程无法正确配置环境,因此我在收集网上资料及亲自配置成功的情况下,写出此文章.如有无法配置成功的话,欢 ...

  9. Android Studio安装、配置教程全 - 安卓开发环境的配置手册

    Android Studio的安装.配置 本文提供全流程,中文翻译. Chinar坚持将简单的生活方式,带给世人! (拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) 一 Downl ...

  10. 【错误记录】Android Studio 中 Gradle 配置报错 ( Can‘t determine type for tag ‘<item name=““ type=“String“>)

    文章目录 一.报错信息 二.解决方案 一.报错信息 在 Android Studio 工程的 build.gradle 中的 " android # defaultConfig " ...

最新文章

  1. java list 常见的使用方法
  2. 自动驾驶的实现之路——几大关键传感器应用解析
  3. AJAX推送与拉取方式的比较
  4. h264.265裸流和音频(ALAW或PCM)封装为mp4
  5. Android NFC读取电子标签
  6. 初二物理模型有哪些_初二是成绩下滑的高危期,做好这5点成绩涨涨涨!(附全学科提升技巧,家长转给孩子!)...
  7. mac sierra 10.12部分注册机Special-K+CORE Keygen不能运行的问题
  8. 故宫学生网页设计作品 dreamweaver作业静态HTML网页设计模板 旅游景点网页作业制作
  9. Struts2中的ModelDriven机制及其运用
  10. PCL之鼠标拾取点云的三维坐标
  11. 移除collection中元素的注意事项(应用collection.remove移除元素造成的错误)
  12. [Andriod官方API指南]连接之蓝牙
  13. 用Visual Studio调试asp程序
  14. 计算机网络自顶向下方法 习题参考答案 第三章
  15. 【Scratch】青少年蓝桥杯_每日一题_12.01_角色装扮
  16. Python计算二项分布教程
  17. css3中边框的4种样式
  18. 前端iframe标签介绍及使用
  19. PHP 手机短信发送验证码
  20. 蓝牙设备改参数教程_修改蓝牙设备的名称

热门文章

  1. Google News 中文上线
  2. 在C++中for、if...内定义的变量在其之外就失效了~
  3. websphere内存溢出
  4. git切换到指定tag
  5. linux进程--init进程(九)
  6. leetcode算法题--只有两个键的键盘
  7. python多线程处理图片_Python斗图网多线程爬取图片
  8. .NET弹出对话框小结
  9. [ Luogu 4626 ] 一道水题 II
  10. ecma 2018, javascript spread syntax behaves like Object.assign