我的Android使用openCV记录(2)

博主QQ:1356438802

二、opecnv for android 开发环境搭建:

opencv for android SDK 安装:

进入官网(http://opencv.org/)下载OpenCV4Android并解压,其目录结构如下:

其中,

(1). sdk目录即是我们开发opencv所需要的类库;

(2). samples目录中存放着若干opencv应用示例(包括人脸检测等),可为我们进行android下的opencv开发提供参考;

(3). doc目录为opencv类库的使用说明及api文档等;

(4). apk目录则存放着对应于各内核版本的OpenCV_2.4.3.2_Manager_2.4应用安装包。此应用用来管理手机设备中的opencv类库,在运行opencv应用之前,必须确保手机中已经安装了OpenCV_2.4.3.2_Manager_2.4_*.apk,否则opencv应用将会因为无法加载opencv类库而无法运行。

将SDK引入工作空间

(1) 选择一个路径,新建文件夹做为工作空间(我在E盘根目录下新建workspace目录来做为工作空间);

(2) 将OpenCV-2.4.3.2-android-sdk中的sdk目录copy至工作空间,并将其更名为OpenCV-SDK(是否更改名称无所谓,这是我个人习惯而已);

(3) 以新建的目录为工作空间,打开eclipse;

(4) 将OpenCV-SDK引入到工作空间中,如下图所示:

三、使用java API开发android

创建工程

(1) 打开eclipse,创建android应用工程GrayProcess;

(2) 将测试图像lena.jpg添加到资源目录res/drawable-hdpi中;

(3) 在Package Explorer中选择项目GrayProcess,单击右键在弹出菜单中选择Properties,然后在弹出的Properties窗口中左侧选择Android,然后点击右下方的Add按钮,选择OpenCV Library 2.4.3并点击OK,操作完成后,会将OpenCV类库添加到GrayProcess的Android Dependencies中,如下图所示:

工程代码:

这是我自己成功运行的代码,链接:http://pan.baidu.com/s/1pLpHuLt 密码:ep05

(1) 字符串资源文件:strings.xml

[html] view
plain
 copy

  1. <resources>
  2. <string name="app_name">GrayProcess</string>
  3. <string name="hello_world">Hello world!</string>
  4. <string name="menu_settings">Settings</string>
  5. <string name="title_activity_main">MainActivity</string>
  6. <string name="str_proc">gray process</string>
  7. <string name="str_desc">image description</string>
  8. </resources>

(2) 布局文件:main.xml

[html] view
plain
 copy

  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:orientation="vertical"
  4. android:layout_width="match_parent"
  5. android:layout_height="match_parent" >
  6. <Button
  7. android:id="@+id/btn_gray_process"
  8. android:layout_width="fill_parent"
  9. android:layout_height="wrap_content"
  10. android:text="@string/str_proc"/>
  11. <ImageView
  12. android:id="@+id/image_view"
  13. android:layout_width="wrap_content"
  14. android:layout_height="wrap_content"
  15. android:contentDescription="@string/str_proc"/>
  16. </LinearLayout>

(3) MainActivity.java

[java] view
plain
 copy

  1. package com.iron.grayprocess;
  2. import org.opencv.android.BaseLoaderCallback;
  3. import org.opencv.android.LoaderCallbackInterface;
  4. import org.opencv.android.OpenCVLoader;
  5. import org.opencv.android.Utils;
  6. import org.opencv.core.Mat;
  7. import org.opencv.imgproc.Imgproc;
  8. import android.os.Bundle;
  9. import android.app.Activity;
  10. import android.graphics.Bitmap;
  11. import android.graphics.BitmapFactory;
  12. import android.graphics.Bitmap.Config;
  13. import android.view.View;
  14. import android.view.View.OnClickListener;
  15. import android.widget.Button;
  16. import android.widget.ImageView;
  17. public class MainActivity extends Activity implements OnClickListener{
  18. private Button btnProc;
  19. private ImageView imageView;
  20. private Bitmap bmp;
  21. //OpenCV类库加载并初始化成功后的回调函数,在此我们不进行任何操作
  22. private BaseLoaderCallback  mLoaderCallback = new BaseLoaderCallback(this) {
  23. @Override
  24. public void onManagerConnected(int status) {
  25. switch (status) {
  26. case LoaderCallbackInterface.SUCCESS:{
  27. } break;
  28. default:{
  29. super.onManagerConnected(status);
  30. } break;
  31. }
  32. }
  33. };
  34. @Override
  35. public void onCreate(Bundle savedInstanceState) {
  36. super.onCreate(savedInstanceState);
  37. setContentView(R.layout.main);
  38. btnProc = (Button) findViewById(R.id.btn_gray_process);
  39. imageView = (ImageView) findViewById(R.id.image_view);
  40. //将lena图像加载程序中并进行显示
  41. bmp = BitmapFactory.decodeResource(getResources(), R.drawable.lena);
  42. imageView.setImageBitmap(bmp);
  43. btnProc.setOnClickListener(this);
  44. }
  45. @Override
  46. public void onClick(View v) {
  47. Mat rgbMat = new Mat();
  48. Mat grayMat = new Mat();
  49. //获取lena彩色图像所对应的像素数据
  50. Utils.bitmapToMat(bmp, rgbMat);
  51. //将彩色图像数据转换为灰度图像数据并存储到grayMat中
  52. Imgproc.cvtColor(rgbMat, grayMat, Imgproc.COLOR_RGB2GRAY);
  53. //创建一个灰度图像
  54. Bitmap grayBmp = Bitmap.createBitmap(bmp.getWidth(), bmp.getHeight(), Config.RGB_565);
  55. //将矩阵grayMat转换为灰度图像
  56. Utils.matToBitmap(grayMat, grayBmp);
  57. imageView.setImageBitmap(grayBmp);
  58. }
  59. @Override
  60. public void onResume(){
  61. super.onResume();
  62. //通过OpenCV引擎服务加载并初始化OpenCV类库,所谓OpenCV引擎服务即是
  63. //OpenCV_2.4.3.2_Manager_2.4_*.apk程序包,存在于OpenCV安装包的apk目录中
  64. OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_3, this, mLoaderCallback);
  65. }
  66. }

运行结果

 
  

时间: 2024-10-07 02:43:01

我的Android使用openCV记录(2)的相关文章

我的Android使用openCV记录(1)

博主QQ:1356438802 前面的文章我已经说了,我的最终目的是要在Android上应用openCV. 刚开始我在Ubuntu虚拟机上搭建了openCV的开发环境,可是虚拟机太卡,我又换到windows下,搭建QT开发环境. 经过两个平台的折腾,我已经对openCV的开发环境滚瓜烂熟了.现在我要在Android上run openCV的应用!!! 耶! start...(其实我这篇文章也是参考别人的来操作,不过我的方法更简单些!) 一.首先要搭建windows平台的安卓开发环境 这一步呢,其实

我的Android使用openCV记录(3)

博主QQ:1356438802 三.使用 c++ API开发android,其实也就是做JNI开发: JNI--java native interface,java本地接口.可以在java类中调用jni函数,而jni函数又以C++的形式调用了openCV库. 创建工程 步骤如工程一,创建新工程GrayProcess2,将lena.jpg添加到资源文件,并按上面所示将opencv类库添加到工程中. 编写上层代码(java) (1)Stings.xml [html] view plain copy

【Android实战】记录自学自定义GifView过程,能同时支持gif和其他图片!【实用篇】

之前写了一篇博客,<[Android实战]记录自学自定义GifView过程,详解属性那些事![学习篇]> 关于自定义GifView的,详细讲解了学习过程及遇到的一些类的解释,然后完成了一个项目,能通过在xml加入自定义 view (MyGifView)中加入自定义属性(my:gif_src = "@drawable/coffee"),达到播放gif图片的效果. 但是,有几个问题 1.gif_src 属性只支持 gif 图,并不支持其他类型的图片 2.只支持默认的引用图片,不

android的入门记录(一)

---恢复内容开始--- 首先,这是我人生中的第一篇博客,也许严格意义上它并不算是一篇博客,但也代表着一些东西. 前言 我们往往在开始学习一门新的语言或者课程时会遇见各式各样的问题,比如说:环境搭建遇到问题,资源不知道去哪里下载,代码令人无法下手,甚至不知道如何运行. 于是便产生了这样的一篇文章--关于我Android入门的记录,以及各式各样问题的解决. 首先从资源的寻找说起. 第一节 开发环境的搭建 Android开发首先需要搭建运行环境,它们分别为 1.JDK:Java开发工具包,因为安卓使

Android 使用OpenCV之编译环境非CygWin方式(Win7+Eclipse+ADT+CDT+NDK)

本文完全基于官网: https://dl-ssl.google.com/android/eclipse/ 只有简单的三步,官网写的非常简明全面,非常佩服 [准备] 1. Eclipse(Indigo) 2. ADT: 这个不说了,无非就是eclipse添加个android的安装源,如果这里选择了NDK Plugin的话,就会自动安装CDT哟: 3. NDK(android-ndk-r9d-windows-x86_64) 地址: http://developer.android.com/tools

记:Android 服务站 问题记录与解决方案

1.dnsmasq域名劫持失败: 现象: 开启wifi热点后确实执行了dnsmasq命令,但是域名劫持失败. 原因: wifi热点开启命令执行后直接执行了dnsmasq命令,当热点开启过程时间很短时域名劫持可以成功:但是启动稍慢即会被系统启动的dnsmasq命令给杀掉并覆盖:所以会导致无效. 解决方案: 开启dnsmasq前定时检查wifi热点是否已经开启成功,成功后再kill掉系统启动的dnsmasq进程,再使用自定义的配置文件执行dnsmasq命令. 2.wifi热点启动频繁失败: 现象:

【Android实战】记录自学自己定义GifView过程,能同一时候支持gif和其它图片!【有用篇】

之前写了一篇博客.<[Android实战]记录自学自己定义GifView过程,具体解释属性那些事! [学习篇]> 关于自己定义GifView的,具体解说了学习过程及遇到的一些类的解释,然后完毕了一个项目,能通过在xml增加自己定义 view (MyGifView)中增加自己定义属性(my:gif_src = "@drawable/coffee").达到播放gif图片的效果. 可是.有几个问题 1.gif_src 属性仅仅支持 gif 图,并不支持其它类型的图片 2.仅仅支持

arcgis android 图上记录gps轨迹

原文  arcgis android 图上记录gps轨迹 public class MainActivity extends Activity { MapView mMapView; LocationDisplayManager lDisplayManager = null; GraphicsLayer gpsGraphicsLayer; Polyline mPolyline; int pointCount = 0; @Override protected void onCreate(Bundl

android常用工具记录

ActionBarSherlock:actionbar统一Api,独立于android各个版本,扩展于support library. 网址:http://actionbarsherlock.com/ android常用工具记录,码迷,mamicode.com