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:

构造函数

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

API 里非常重要的一个类

MatOfKeyPoint:

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

  1. public void alloc(int elemNumber)
  1. public void fromArray(KeyPoint... a)
  1. public void fromList(java.util.List<KeyPoint> lkp)
  1. public java.util.List<KeyPoint> toList()
  1. 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
  1. 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
  1. public static void drawContours(Mat image,
  2. java.util.List<MatOfPoint> contours,
  3. int contourIdx,
  4. Scalar color,
  5. 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. 小型web服务器thttpd的学习总结(下)

    1.主函数模块分析 对于主函数而言,概括来说主要做了三点内容,也就是初始化系统,进行系统大循环,退出系统.下面主要简单阐述下在这三个部分,又做了哪些工作呢. 初始化系统 拿出程序的名字(argv[0] ...

  2. sql 联合查询

    SELECT NZD_Products.Prd_typename a FROM  dbo.NZD_Products where dbo.NZD_Products.Prd_barcodenumber = ...

  3. 重写(Override)

    重写(Override) 重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变.即外壳不变,核心重写! 重写的好处在于子类可以根据需要,定义特定于自己的行为. 也就是说子类 ...

  4. Android开源-NineOldAndroids

    开源地址: https://github.com/JakeWharton/NineOldAndroids 简单介绍:NineOldAndroids是一款支持在低版本号开发的Android动画的框架 包 ...

  5. win7(64位)+vs2008配置Directshow

    参考链接:http://zhuyanfeng.com/archives/1663 PC环境:win7 64bit + vs2008 1.下载64位的win7 SDK2.安装过程中遇到错误(必须要卸载v ...

  6. 6、手把手教React Native实战之JSX入门

    React是由ReactJS与React Native组成,其中ReactJS是Facebook开源的一个前端框架,React Native是ReactJS思想在native上的体现! JSX并不是一 ...

  7. SurvivalShooter学习笔记(七.玩家射击)

    玩家射击:(这个脚本放在玩家的空子物体上,这个位置为枪口位置) 点击鼠标,玩家射击: 射击枪口发光,射击通过射线,方向有激光效果:(关于射线不明白可以参考Unity射线相关) 射击有射击音效 射击有每 ...

  8. Android获取 应用程序大小,数据大小,缓存大小

    在项目中创建,android.content.pm 包名.里面创建两个aidl文件.PackageStats.aidl  和 IPackageStatsObserver.aidl. PackageSt ...

  9. 如何使用HTTP压缩优化服务器

    鉴于互联网上的宽带有限,网络管理人员任何旨在加速接入速度的努力都是有价值的.其中的一个方法就是通过HTTP压缩技术实现接入速度的加速,它通过减少在服务器和客户端之间传输的数据量,显著地提高网站的性能. ...

  10. python之进制转换

    Python中二进制是以0b开头的:    例如: 0b11 则表示十进制的3 8进制是以0开头的:    例如: 011则表示十进制的9 16进制是以0x开头的:    例如: 0x11则表示十进制 ...