Opencv开发android应用
2015-12-20 20:42
603 查看
为了大家少走弯路,写这篇博客。目的是在开发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;
}
}
};
@Override
protected 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);
}
@Override
public 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;
}
@Override
public 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);
}
@Override
public 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;
}
}
};
一般有两种方法,第一种是异步调用,第二种是静态初始化(需要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;
}
}
};
@Override
protected 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);
}
@Override
public 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;
}
@Override
public 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);
}
@Override
public 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;
}
}
};
相关文章推荐
- Android中shareSDK使用时注意事项
- Dalvik switch语句
- Android中折线图实现方法(各类图表实现)
- Android QQ,WeChat,Weibo三方登陆
- Android中selector背景选择器
- Android事件分发机制研究
- Android进阶——声波振幅显示
- Android短信拦截
- Android Studio的NDK开发之 用javah生成头文件
- Android 虚化的高级技巧
- Android 核心理解 :Binder 和 Server
- Android必学之数据适配器BaseAdapter
- 欢迎使用CSDN-markdown编辑器
- android studio 新建assets 文件
- 记录我第一次在Android开发图像处理算法的经历
- Android界面之常用的圆角提示框Dialog
- Android之Fragment学习(三)
- android4大组件之BroadcastReceiver广播接收者
- android LayoutInflater.inflate()的参数及其用法
- android developer