Android学习六---OpenCV for android samples
搭建好OpenCV4Android环境后,就要着手开发自己的应用了。对于一个没有OpenCV基础的人来开发OpenCV应用确实有点难度,不过我们可以从samples里学起,结合javadoc和万能的网络开发一个简单的应用应该不难。为了简单,我们采用的是纯粹的java API不涉及JNI,等对这一部分熟悉之后再来采用JNI实现。
首先对OpenCV的android应用来个感性的认识,把samples中的image-manipulations安装到手机上(手机上先安装好OpenCV manager 和binary pack见上节),然后把menu调出来,试一试Histograms,Canny ,sobel 等菜单,会发现应用对摄像头捕获的图像实时的处理,在屏幕的一个小的窗口中输出处理结果图。
这样一来我们的重点就确定了,简单的界面设计,数据存储,显示和算法的应用是关键。而算法的应用就通过调用一系列的API来实现。我们就围绕下面几个问题来进行
1.操纵相机,取出图像进行处理
首先必须要知道OC(OpenCV)是怎么操纵相机的,如何从图像流中取出一帧帧来进行处理?
解决:通过opencv官网的例子了解
JAVA 包含OpenCV java包。即通过非同步的方式来进行应用开发,这个是官网强烈推荐的方式,因为可以减少代码量等优势,主要是用OpenCV Manager方式来获取OpenCV库(已经在目标系统安装好了)
1.1 File -> Import -> Existing project in your workspace.

1.2. Project -> Properties -> Android -> Library -> Addselect OpenCV Library - 2.4.9.

1.3 一个简单的程序
public class Sample1Java extends Activity implements CvCameraViewListener {
private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
@Override
public void onManagerConnected(int status) {
switch (status) {
case LoaderCallbackInterface.SUCCESS:
{
Log.i(TAG, "OpenCV loaded successfully");
mOpenCvCameraView.enableView();
} break;
default:
{
super.onManagerConnected(status);
} break;
}
}
};
@Override
public void onResume()
{
super.onResume();
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_6, this, mLoaderCallback);
}
...
}
OnManagerConnected callback会在UI线程中调用,在使用OpenCV调用或者载入OpenCV支撑的本地库前一定要先包含这一调用。在OpenCV成功初始化后载入本地库,默认的BaseLoaderCallback会把应用程序上下文当成是Activity,所以在初始化失败时会调用Activity.finish()。要重写这一行为,就必须重写finish()这一方法。
2.要了解处理的程序是写在哪一部分的,如何达到只对这一部分修改,而其他部分不变?
官网上的samples,ImageManipulationsActivity采用的是OpenCV java API来写的,通过一个hello opencv知道整个流程(虽然这个程序没有运行成功),
知道应该修改的是OnCameraFrame,对每帧图像进行处理。
3.如何实现一个简单基于连通域分析的OpenCV文本定位算法,把算法嵌入应用程序中?
算法流程,对彩色的帧图像进行二值化,二值化之后进行连通域分析,分析每个连通域的情况,对连通域进行分析,去除一些不符合要求的,对剩下的连通域采用形态学图像处理,连成一个文本行,在对文本行进行滤除,最后得到文本的区域位置。
4.如何对错误进行调试使最终实现运行?
采用同Android相同的方式进行调试,如logcat和端点,一系列快捷键的使用如F5,F6,F7,F8 和ctrl+R等。
Android学习六---OpenCV for android samples的更多相关文章
- android学习五---OpenCV for android环境搭建
学习android的目的是想在手机上实现计算机视觉的算法.一般算法的研究都是在Matlab上进行,但是手机平台没有那么多的计算资源,用matlab显然是不太现实的.而OpenCV是基于C++语言编写的 ...
- android学习点滴一:android环境的搭建
东一点西一点,很多时间都浪费了.是该系统性的做好自己的东西了. <android学习点滴一:android环境的搭建> [环境变量]变量名:JAVA_HOME变量值:C:\Java\jdk ...
- android 学习六 构建用户界面和使用控件
1.常用Android控件最终都会继承自View类 2.ViewGroup是一些布局类列表的基类,包括View和ViewGroup 3.构造界面的三种方法 a.完全使用代码(太灵活,而不好维护) ...
- openfire Android学习(六)----总结
Xmpp的一些方法整理到一个工具类中了 XmppConnection.java [java] view plaincopy [java] view plaincopy import java.io.B ...
- Android:Android Studio导入OpenCV(Android项目)
在使用OpenCV之前,Android必须先下载ndk,因为OpenCV使用了native代码,这里建议Android Studio创建C++项目来写OpenCV的内容 1.首先在官网下载OpenCV ...
- android学习十二(android的Content Provider(内容提供器)的使用)
文件存储和SharePreference存储以及数据存储一般为了安全,最好用于当前应用程序中訪问和存储数据.内容提供器(Content Provider)主要用于在不同的应用程序之间实现数据共享的功能 ...
- Android学习十二---在android上实现图像匹配
一.效果图及功能描述 效果图 点击ShowImg后 点击match,然后点击showmatch,可以不断点击showmatch. 主要功能描述:显示在SD卡上已经存在的图片test.jpg,根据图片在 ...
- android学习十四(android的接收短信)
收发短信是每一个手机主要的操作,android手机当然也能够接收短信了. android系统提供了一系列的API,使得我们能够在自己的应用程序里接收和发送短信. 事实上接收短信主要是利用我们前面学过的 ...
- android学习一(了解android)
声明:android学习文件中面的全部内容为都是整理来自第一行代码Android.在接下来的文章里我就不在进行反复的声明. 想看原版的能够买书看看.或者去作者的博客http://blog.csdn.n ...
随机推荐
- NPOI 导出Excel图片 (网络)
导出网络图片,需要将网络图片下载到本地或者内存流中,建议下载的时候使用缩略图: 高清图片效率慢: Uri uri = new Uri(imgPath); //imgPath :网络图片地址 WebRe ...
- Jquery学习笔记(7)--京东导航菜单
主要是几个模块的浮动和定位不好处理,另外还缺少右侧导航,及幻灯片. <!DOCTYPE html> <html lang="en"> <head> ...
- Servlet -doGet() doPost()原理
一.自定义类只需要重写doGet(HttpServletRequest request, HttpServletResponse response) 和doPost(HttpServletReques ...
- 使用python进行新浪微博粉丝爬虫
由于最近没事在学python,正好最近也想趴下新浪微博上边的一些数据,在这里主要爬去的是一个人的粉丝具体信息(微博昵称,个人介绍,地址,通过什么方式进行关注),所以就学以致用,通过python来爬去微 ...
- Struts1中actionform和action属于MVC哪一层,为什么?
Struts1中actionform和action属于MVC哪一层,为什么? 解答:actionform和action属于MVC的Model层,Action用来处理业务逻辑,actionform保存用 ...
- String, StringBuffer StringBuilder的区别。
解答:String的长度是不可变的: StringBuffer的长度是可变的,如果你对字符串中的内容经常进行操作,特别是内容要修改时,那么使用StringBuffer,如果最后需要String,那么使 ...
- Python_selenium封装一个浏览器引擎类
Python_selenium封装一个浏览器引擎类 现在我们在编写一个类,叫浏览器引擎类(此例为:启动浏览器),将文件名命名为browser.py,代码下面通过更改一个字符串的值,运用if语句判断和控 ...
- 利用python输出000至999中间的数
打造一个000-999的字典 ): : i = '+str(i) elif <=i and i<: i ='+str(i) else: i=str(i) with open('1.txt' ...
- 《Sqlserver》Javaweb项目链接sqlserver 2008R2时出现的一系列的错误
好久没有弄java,玩eclipse了,最近因为小小的原因,参加一个比赛,不得不把javaweb的东西又捡起来,所以不熟悉,再加上之前链接数据库都是用Oracle的,现在公司的电脑上又只是安装了sql ...
- pandas 读取文件
import pandas as pd import matplotlib.pyplot as plt data = pd.read_csv('G:timeCompare.txt', sep=' ', ...