OpenCV java API的文档说明在OpenCV-2.4.10-android-sdk/sdk/java/javadoc/index.html的文件夹下。

想用java API的方式进行OpenCV4android 应用开发还是挺简单,首先就这些API先熟悉一下,然后对自己要开发的应用设计好流程,需要用到什么的数据结构进行存储,用到什么算法。然后对算法进行了解,输入参数是什么,输出参数是什么。有哪些fields和methods。

1.Packages:org.opencv.core

Core:

对矩阵的进行基本运算(加减乘除等)的一些函数

CvType:

基本数据类型的定义

CV_16UC3,代表的是16位无符号整形3通道。

Mat:

构造函数

public Mat(int rows,
int cols,
int type)
public Mat(int rows,
int cols,
int type,
Scalar s)
public Mat(Mat m,
Rect roi)
Methods:
  • get
    public double[] get(int row,
    int col)
  • 取得某个坐标的数据,返回值是double,包含的是多个通道数据。
  • eye
    public static Mat eye(Size size,
    int type)
  • 类似matlab中的初始化eye将对角线元素置为1,其他为0.
  • height
    • public int height()
  • 得到矩阵的高
  • width
    • public int width()
  • 得到矩阵的宽
  • public static Mat ones(int rows,
    int cols,
    int type)
  • put
    • public int put(int row,
      int col,
      byte[] data)

API 里非常重要的一个类

MatOfKeyPoint:

存储KeyPoint的Match,继承自Mat,包含Mat的一系列Methods,另外还有

public void alloc(int elemNumber)
public void fromArray(KeyPoint... a)
public void fromList(java.util.List<KeyPoint> lkp)
public java.util.List<KeyPoint> toList()
public KeyPoint[] toArray()

KeyPoint:

用于显著点检测的数据结构,包含的数据域Keypoint的坐标,有意义keypoint的半径。

Point:

点,一般用来表示像素的坐标,包含:double x,double y两个域,
Method and Description

Point clone()

double dot(Point p)

boolean equals(java.lang.Object obj)

int hashCode()

boolean inside(Rect r)

void set(double[] vals)

java.lang.String toString()

MatOfPoint:

保存Point的Mat,同样继承自Mat,包含Mat的一系列Methods。

Rect:

Rect(int x, int y, int width, int height)

重要的方法

Method and Description:

double area():返回rect的面积

Point br():返回rect的左上角坐标

Point tl():返回rect的右下角坐标

void set(double[] vals)

Size size()

2.Packages:org.opencv.imgproc

这个包中包括滤波,计算直方图,颜色转换,边缘检测,二值化,模糊,金字塔运算,调整图像大小等等。

介绍几个比较重要和常用的算法。

1.对图像进行二值化

static void

adaptiveThreshold(Mat src, Mat dst, double maxValue, int adaptiveMethod, int thresholdType, int blockSize, double C)

使用自适应阈值的方式来二值化图像, T(x,y)是对每个像素计算的阈值.

  • 对于 ADAPTIVE_THRESH_MEAN_C, T(x,y) (x, y)的blockSize x blockSize 的领域均值 减去 C.
  • 对于ADAPTIVE_THRESH_GAUSSIAN_C, T(x,y) (x, y)的blockSize x blockSize 的领域加权均值 减去 C.
Parameters:
src - 原图像8位单通道图像.
dst -和原图像相同类型的的目标图像.
maxValue - 和thresholdType相关,如果这一参数为 THRESH_BINARY,那么二值化图像像素大于阈值为maxValue,反之参数为THRESH_BINARY_INV,则小于阈值的被赋值为maxValue。
adaptiveMethod - 能够使用哪种自适应阈值算法, ADAPTIVE_THRESH_MEAN_C orADAPTIVE_THRESH_GAUSSIAN_C.
thresholdType - Thresholding type that must be either THRESH_BINARY or THRESH_BINARY_INV.
blockSize - 对于某个像素,计算其阈值所考虑的元素范围: 3, 5, 7, and so on.
C - 从均值中减去的一个常数. 一般是取正值,也可以去0或者负数.

example:

Imgproc.adaptiveThreshold(inputFrame.gray(), mbyte, 255,Imgproc.ADAPTIVE_THRESH_GAUSSIAN_C, Imgproc.THRESH_BINARY_INV, 5, 2);

2.寻找图像的轮廓

findContours
public static void findContours(Mat image,java.util.List<MatOfPoint> contours,Mat hierarchy,int mode,int method)

寻找二值图像中的轮廓。

Parameters:
image -源图像,8位单通道图像,非零值被当做是1,所以图像是被当作二值图像来对待的。 
contours - 检测到的轮廓,轮廓是由一系列的点构成,存储在java 的list中,每个list的元素是MatOfPoint.
hierarchy - 可选的输出参数,包含着图像的拓扑信息,有和contours相同数量的元素。对于每个contours[i],对应的hierarchy[i][0], hiearchy[i][1], hiearchy[i][2]和 hiearchy[i][3]分别被设置同一层次的下一个,前一个,第一个孩子和父的contour。 如果contour i不存在对应的contours,那么相应的hierarchy[i] 就被设置成负数。
mode - Contour的生成模式

  • CV_RETR_EXTERNAL 只生成最外层的contours.对于所有的contours都有hierarchy[i][2]=hierarchy[i][3]=-1 .
  • CV_RETR_LIST 不使用层次结构得到所有的contours.
  • CV_RETR_CCOMP 使用两个层次结构得到所有的contours .
  • CV_RETR_TREE得到所有的contours,并对contours建立层次结构.
method - Contour 的估计方式.

  • CV_CHAIN_APPROX_NONE stores absolutely all the contour points. That is, any 2 subsequent points (x1,y1) and (x2,y2) of the contour will be either horizontal, vertical or diagonal neighbors, that is, max(abs(x1-x2),abs(y2-y1))==1.
  • CV_CHAIN_APPROX_SIMPLE compresses horizontal, vertical, and diagonal segments and leaves only their end points. For example, an up-right rectangular contour is encoded with 4 points.
  • CV_CHAIN_APPROX_TC89_L1,CV_CHAIN_APPROX_TC89_KCOS applies one of the flavors of the Teh-Chin chain approximation algorithm. See [TehChin89] for details.

example:

首先定义存储hierarchy和contours的变量

List<MatOfPoint> contour = new ArrayList<MatOfPoint>();

Mat hierarchy = new Mat();

Imgproc.findContours(mbyte, contour, hierarchy,
                    Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_NONE);

for (int ind = 0; ind < contour.size(); ind++) {

…………..

}

3.画出图形轮廓

drawContours
public static void drawContours(Mat image,
java.util.List<MatOfPoint> contours,
int contourIdx,
Scalar color,
int thickness)

Draws contours outlines or filled contours.

3.Packages:org.opencv.features2d

主要是提取二维图像的特征比如MSER,HARRIS,STAR,SURF,SIFT等。下篇更新。

Android学习八---OpenCV JAVA API的更多相关文章

  1. Java数据持久层框架 MyBatis之API学习八(Java API详解)

    对于MyBatis的学习而言,最好去MyBatis的官方文档:http://www.mybatis.org/mybatis-3/zh/index.html 对于语言的学习而言,马上上手去编程,多多练习 ...

  2. android学习五---OpenCV for android环境搭建

    学习android的目的是想在手机上实现计算机视觉的算法.一般算法的研究都是在Matlab上进行,但是手机平台没有那么多的计算资源,用matlab显然是不太现实的.而OpenCV是基于C++语言编写的 ...

  3. Android学习六---OpenCV for android samples

    搭建好OpenCV4Android环境后,就要着手开发自己的应用了.对于一个没有OpenCV基础的人来开发OpenCV应用确实有点难度,不过我们可以从samples里学起,结合javadoc和万能的网 ...

  4. 【Android】完善Android学习(三:API 3.0)

    备注:之前Android入门学习的书籍使用的是杨丰盛的<Android应用开发揭秘>,这本书是基于Android 2.2API的,目前Android已经到4.4了,更新了很多的API,也增 ...

  5. Android学习探索之Java 8 在Android 开发中的应用

    前言: Java 8推出已经将近2年多了,引入很多革命性变化,加入了函数式编程的特征,使基于行为的编程成为可能,同时减化了各种设计模式的实现方式,是Java有史以来最重要的更新.但是Android上, ...

  6. 学习android学习必备的java基础知识--四大内部类

    学习android必备的java基础知识--四大内部类 今天学习android课程,因为我的主专业是JAVA,但是兴趣班却有这其他专业的同学,学习android 需要具备一些java的基础知识,因此就 ...

  7. opencv java api提取图片sift特征

    opencv在2.4.4版本以后添加了对java的最新支持,可以利用java api了.下面就是我利用opencv的java api 提取图片的sift特征. import org.opencv.co ...

  8. 【Android】完善Android学习(七:API 4.0.3)

    备注:之前Android入门学习的书籍使用的是杨丰盛的<Android应用开发揭秘>,这本书是基于Android 2.2API的,目前Android已经到4.4了,更新了很多的API,也增 ...

  9. 【Android】完善Android学习(六:API 4.0)

    备注:之前Android入门学习的书籍使用的是杨丰盛的<Android应用开发揭秘>,这本书是基于Android 2.2API的,目前Android已经到4.4了,更新了很多的API,也增 ...

随机推荐

  1. linux学习笔记34--命令rcp和scp

    rcp代表“remote file copy”(远程文件拷贝).该命令用于在计算机之间拷贝文件.rcp命令有两种格式.第一种格式用于文件到文件的拷贝:第二种格式用于把文件或目录拷贝到另一个目录中. 1 ...

  2. 猫猫学iOS 之微博项目实战(5)微博自己定义搜索框searchBar

    猫猫分享.必须精品 原创文章.欢迎转载. 转载请注明:翟乃玉的博客 地址:http://blog.csdn.net/u013357243 一:效果 用UITextField简单定义一个搜索框 二:调用 ...

  3. mean 快速开发和现有技术的对比分析

    最近无聊的时候,网上看了下全栈开发的相关资料,发现了mean这个好玩的东西.可能我是一个比较传统的开发,接触.net 已经将近快8年了,一直在传统的后端多层架构的模式下开发,一时对这个新的东西就喜欢研 ...

  4. 圆角带箭头的提示框css实现

    css是一个很强大的东西,很多网页效果,我们可以通过css直接实现.今天给大家分享的是一个用css实现的圆角带箭头的提示框. 效果如下图: 这一个样式主要涉及到了css的边框样式border的运用和定 ...

  5. Unity3D GUI图形用户界面系统

    1.skin变量 using UnityEngine; using System.Collections; public class Skin : MonoBehaviour { public GUI ...

  6. 【BZOJ】3479: [Usaco2014 Mar]Watering the Fields(kruskal)

    http://www.lydsy.com/JudgeOnline/problem.php?id=3479 这个还用说吗.... #include <cstdio> #include < ...

  7. Sql Server根据表名生成查询的存储过程(查询条件可选)

    static void Main(string[] args) { string 表名 = "water_emstime"; string sql = "exec Get ...

  8. gibhub上搭建个人静态网站介绍

    之前学习过git的基本命令.今天介绍一下github上搭建个人网站的步骤. 在window系统上搭建gibhub个人网站(只能执行html.css和js文件),这就是纯静态页面. 步骤一:注册gith ...

  9. 【统计分析】ROC曲线

    http://baike.baidu.com/link?url=O8nVf39qW4UpYAegk9cJfYARCFDg8YHQ6p5wFnWxYvo151doXo-WvG5Rfz0j4R-r 受试者 ...

  10. hdu 5090 Game with Pearls(最大匹配)

    Game with Pearls Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) ...