Opencv开发android应用

来源:互联网 发布:java软件工程师查工资 编辑:程序博客网 时间:2024/05/16 07:28

为了大家少走弯路,写这篇博客。目的是在开发android程序时使用opencv库

一般有两种方法,第一种是异步调用,第二种是静态初始化(需要NDK,CDT插件)。

下面写的是异步调用!!

环境

windows7 、opencv2.4.9、eclipse

一、下载安装opencv android SDK

http://opencv.org/downloads.html

二、配置opencv android环境

1、将opencv android SDK中的SDK文件夹拷到自己的工作空间

2、导入opencv库

File-->Import-->Existing projects into workspace


找到你刚才拷到工作空间下的SDK文件夹,点击finish

会出现这个

3、新建Android工程TestOpencvAndroid,右击选properties->Android,点击Add



选Opencv Library

4、将SD\native\libs下的所有东西拷进android工程下的libs文件夹


5、测试代码

package com.example.testopencvandroid;import org.opencv.android.BaseLoaderCallback;  import org.opencv.android.LoaderCallbackInterface;  import org.opencv.android.OpenCVLoader;  import org.opencv.android.Utils;  import org.opencv.core.Mat;  import org.opencv.imgproc.Imgproc;    import android.os.Bundle;import android.util.Log;import android.app.Activity;  import android.graphics.Bitmap;  import android.graphics.BitmapFactory;  import android.graphics.Bitmap.Config;import android.view.Menu;import android.view.MenuItem;import android.view.View;  import android.view.View.OnClickListener;  import android.widget.Button;  import android.widget.ImageView; public class MainActivity extends Activity implements OnClickListener{private Button btnProc;        private ImageView imageView;        private Bitmap bmp;                //OpenCV类库加载并初始化成功后的回调函数,在此我们不进行任何操作        private BaseLoaderCallback  mLoaderCallback = new BaseLoaderCallback(this) {            @Override            public void onManagerConnected(int status) {                switch (status) {                    case LoaderCallbackInterface.SUCCESS:{                    } break;                    default:{                        super.onManagerConnected(status);                    } break;                }            }        };        @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main); Log.i("main", "Trying to load OpenCV library");           if (!OpenCVLoader.initDebug()) {               Log.e("main", "Cannot connect to OpenCV Manager");           } else {            mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS);           }                                 btnProc = (Button) findViewById(R.id.btn_gray_process);             imageView = (ImageView) findViewById(R.id.image_view);             //将lena图像加载程序中并进行显示             bmp = BitmapFactory.decodeResource(getResources(), R.drawable.lena);             imageView.setImageBitmap(bmp);             btnProc.setOnClickListener(this);    }@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.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();if (id == R.id.action_settings) {return true;}return super.onOptionsItemSelected(item);}@Overridepublic void onClick(View v) {// TODO Auto-generated method stub   Mat rgbMat = new Mat();          Mat grayMat = new Mat();          //获取lena彩色图像所对应的像素数据          Utils.bitmapToMat(bmp, rgbMat);          //将彩色图像数据转换为灰度图像数据并存储到grayMat中          Imgproc.cvtColor(rgbMat, grayMat, Imgproc.COLOR_RGB2GRAY);          //创建一个灰度图像          Bitmap grayBmp = Bitmap.createBitmap(bmp.getWidth(), bmp.getHeight(), Config.RGB_565);          //将矩阵grayMat转换为灰度图像          Utils.matToBitmap(grayMat, grayBmp);          imageView.setImageBitmap(grayBmp);  }}
注意:加入这段代码就不需安装opencv Manager

 //OpenCV类库加载并初始化成功后的回调函数,在此我们不进行任何操作        private BaseLoaderCallback  mLoaderCallback = new BaseLoaderCallback(this) {            @Override            public void onManagerConnected(int status) {                switch (status) {                    case LoaderCallbackInterface.SUCCESS:{                    } break;                    default:{                        super.onManagerConnected(status);                    } break;                }            }        };    



0 0
原创粉丝点击