我的Android使用openCV记录(2)

来源:互联网 发布:男士淡斑清洁面膜知乎 编辑:程序博客网 时间:2024/06/07 12:26

博主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
 在CODE上查看代码片派生到我的代码片
  1. <resources>  
  2.   
  3.     <string name="app_name">GrayProcess</string>  
  4.     <string name="hello_world">Hello world!</string>  
  5.     <string name="menu_settings">Settings</string>  
  6.     <string name="title_activity_main">MainActivity</string>  
  7.     <string name="str_proc">gray process</string>  
  8.     <string name="str_desc">image description</string>  
  9.   
  10. </resources>  
(2) 布局文件:main.xml
[html] view plain copy
 在CODE上查看代码片派生到我的代码片
  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.       
  7.     <Button   
  8.         android:id="@+id/btn_gray_process"  
  9.         android:layout_width="fill_parent"  
  10.         android:layout_height="wrap_content"  
  11.         android:text="@string/str_proc"/>  
  12.       
  13.     <ImageView  
  14.         android:id="@+id/image_view"  
  15.         android:layout_width="wrap_content"  
  16.         android:layout_height="wrap_content"  
  17.         android:contentDescription="@string/str_proc"/>  
  18.   
  19. </LinearLayout>  

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

运行结果
    
0 0
原创粉丝点击