OpenCV4Android开发之旅(一)----OpenCV2.4简介及 app通过Java接口调用OpenCV的示例
转自: http://blog.csdn.net/yanzi1225627/article/details/16917961
开发环境:windows+ADT Bundle+CDT+OpenCV-2.4.4-android-sdk
一、OpenCV2.4简介
二、Android APP通过Java接口调OpenCV
1、配置
2、新建项目并引入上面的jar包
3、一个完成的demo:将一个图片灰度化
- <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:paddingBottom="@dimen/activity_vertical_margin"
- android:paddingLeft="@dimen/activity_horizontal_margin"
- android:paddingRight="@dimen/activity_horizontal_margin"
- android:paddingTop="@dimen/activity_vertical_margin"
- tools:context=".MainActivity" >
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_alignParentTop="true"
- android:text="@string/wellcome_words" />
- <ImageView
- android:id="@+id/img_huaishi"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:background="@drawable/nanhuaijin"
- android:layout_centerInParent="true"/>
- <Button
- android:id="@+id/btn_gray_process"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_below="@id/img_huaishi"
- android:layout_centerHorizontal="true"
- android:text="灰度化"/>"
- </RelativeLayout>
java文件:
- package com.example.grayprocess;
- 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.app.Activity;
- import android.graphics.Bitmap;
- import android.graphics.Bitmap.Config;
- import android.graphics.BitmapFactory;
- import android.os.Bundle;
- import android.os.Handler;
- import android.util.Log;
- import android.view.Menu;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.widget.Button;
- import android.widget.ImageView;
- public class MainActivity extends Activity {
- Button btnProcess;
- Bitmap srcBitmap;
- Bitmap grayBitmap;
- ImageView imgHuaishi;
- private static boolean flag = true;
- private static boolean isFirst = true;
- private static final String TAG = "MainActivity";
- //OpenCV库加载并初始化成功后的回调函数
- private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
- @Override
- public void onManagerConnected(int status) {
- // TODO Auto-generated method stub
- switch (status){
- case BaseLoaderCallback.SUCCESS:
- Log.i(TAG, "成功加载");
- break;
- default:
- super.onManagerConnected(status);
- Log.i(TAG, "加载失败");
- break;
- }
- }
- };
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- initUI();
- btnProcess.setOnClickListener(new ProcessClickListener());
- }
- @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;
- }
- public void initUI(){
- btnProcess = (Button)findViewById(R.id.btn_gray_process);
- imgHuaishi = (ImageView)findViewById(R.id.img_huaishi);
- Log.i(TAG, "initUI sucess...");
- }
- public void procSrc2Gray(){
- Mat rgbMat = new Mat();
- Mat grayMat = new Mat();
- srcBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.nanhuaijin);
- 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 grayMat
- Utils.matToBitmap(grayMat, grayBitmap); //convert mat to bitmap
- Log.i(TAG, "procSrc2Gray sucess...");
- }
- private class ProcessClickListener implements OnClickListener{
- @Override
- public void onClick(View v) {
- // TODO Auto-generated method stub
- if(isFirst)
- {
- procSrc2Gray();
- isFirst = false;
- }
- if(flag){
- imgHuaishi.setImageBitmap(grayBitmap);
- btnProcess.setText("查看原图");
- flag = false;
- }
- else{
- imgHuaishi.setImageBitmap(srcBitmap);
- btnProcess.setText("灰度化");
- flag = true;
- }
- }
- }
- @Override
- protected void onResume() {
- // TODO Auto-generated method stub
- super.onResume();
- //load OpenCV engine and init OpenCV library
- OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_4, getApplicationContext(), mLoaderCallback);
- Log.i(TAG, "onResume sucess load OpenCV...");
- // new Handler().postDelayed(new Runnable(){
- //
- // @Override
- // public void run() {
- // // TODO Auto-generated method stub
- // procSrc2Gray();
- // }
- //
- // }, 1000);
- }
- }
功能很简单,就是将一个图片灰度化,然后再次点击恢复成原来的。里面有几个需要注意的事项:
- new Handler().postDelayed(new Runnable(){
- @Override
- public void run() {
- // TODO Auto-generated method stub
- procSrc2Gray();
- }
- }, 1000);
这样就ok了,在按键监听里无需在判断是否是第一次了。程序运行结果:
三、OpenCV网站导航
1、http://opencv.org/ 这是OpenCV的官方网站
2、http://wiki.opencv.org.cn/index.php/ 这是国内的官网老版
OpenCV4Android开发之旅(一)----OpenCV2.4简介及 app通过Java接口调用OpenCV的示例的更多相关文章
- ESP8266开发之旅 基础篇① 走进ESP8266的世界
授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...
- ESP8266开发之旅 网络篇⑨ HttpClient——ESP8266HTTPClient库的使用
授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...
- h5直播开发之旅总结
前言 关于直播,有很多相关技术文章,这里不多说. 作为前端,我们比较关心我们所需要的. 直播的大致流程: APP端调用摄像头 -> 拍摄视频 -> 实时上传视频 -> 服务器端获取视 ...
- 大熊君{{bb}}移动开发之旅(第一季)
一,开篇概述 Hi,大家好!大熊君又和大家见面了,从这篇文章开始我要和大家聊聊移动开发的话题,这部分文章共8季,分别从不同角度来讲解什么是移动开发?移动开发涉及到什么方面的技术点以及移动开发中的常见问 ...
- C#微信开发之旅--自定义菜单
上一篇说道基本信息的回复<C#微信开发之旅--基本信息的回复>,当中就说到文本信息的回复,其他信息的回复,可以参考下开发文档中回复信息的格式进行修改就可以. 下面来实现下自定义菜单.据我了 ...
- C#微信开发之旅--基本信息的回复
上一篇说到配置和验证<C#微信开发之旅--准备阶段> 下面来实现一下简单的信息回复. 也就是接收XML,返回XML 可以去看下微信开发文档的说明:http://mp.weixin.qq.c ...
- Windows Phone 8初学者开发—第4部分:XAML简介
原文 Windows Phone 8初学者开发—第4部分:XAML简介 原文地址: http://channel9.msdn.com/Series/Windows-Phone-8-Developme ...
- Android游戏开发之旅 View类详解
Android游戏开发之旅 View类详解 自定义 View的常用方法: onFinishInflate() 当View中所有的子控件 均被映射成xml后触发 onMeasure(int, int) ...
- 勤拂拭软件Android开发之旅(1) 之 Android 开发环境搭建
勤拂拭软件工作室原创出品,欢迎转载,欢迎交流. 转载请注明原文:http://www.cnblogs.com/wangleiblog/p/6019063.html 勤拂拭软件Android开发之旅目录 ...
随机推荐
- RTFM
RTFM是一个网络语言,意思是:“去读那些他妈的手册”(Read The Fucking Manual),这句话通常用在回复那些只要查阅文件就可以解决,拿出来提问只是浪费别人时间的问题.
- (转)ZooKeeper 笔记(1) 安装部署及hello world
ZooKeeper 笔记(1) 安装部署及hello world 先给一堆学习文档,方便以后查看 官网文档地址大全: OverView(概述) http://zookeeper.apache.or ...
- Install sheild设置了Blue皮肤,但是有的窗口更改不了问题
发现和顺序有关系:1.先指定skins:2.Release:3.再改对话框
- ExtJS4.x 开发环境搭建
需要的资源 ExtJS4.2 eclipse 开发环境搭建 在项目中国需要引用的文件: eclipse中有报错.需要处理的是ext-lang-zh_CN.js,中文编码不能识别.右键->属性-& ...
- shell 函数
1 shell函数的定义及其调用 shell函数有两种格式: function name { commands } name() { commands } 其中,name为函数名,commands为函 ...
- (转)android Fragments详解三:实现Fragment的界面
为fragment添加用户界面 fragment一般作为activity的用户界面的一部分,把它自己的layout嵌入到activity的layout中. 一个 要为fragment提供layo ...
- [转]coredump简介与coredump原因总结
[转]coredump简介与coredump原因总结 http://blog.sina.com.cn/s/blog_54f82cc201013srb.html 什么是coredump? 通常情况下co ...
- 004--VS C++ 绘制封闭图形
//全局变量HPEN hPen;HBRUSH hBru[4];int sBru[4] = { HS_VERTICAL, HS_HORIZONTAL, HS_CROSS, HS_DIAGCROSS }; ...
- 22.I/O特性
IO资源 IO是与外界沟通和控制的通道,fpga提供了丰富的IO和一些实用的特性. 本文简要的将主要的特性摘录下来做设计参考用.具体参数参考handbook. 第一部分:IO特性概述 -----通过软 ...
- QT中实现中文的显示与国际化
1 增加头文件 #include "QTextCodec" 2 在文件中增加如下内容 QTextCodec::setCodecForTr(QTextCodec::codecF ...