Android学习八---OpenCV JAVA API
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)
- Methods:
get
- public double[] get(int row,
- int col)
- public double[] get(int row,
- 取得某个坐标的数据,返回值是double,包含的是多个通道数据。
eye
- 类似matlab中的初始化eye将对角线元素置为1,其他为0.
- height
- public int height()
- 得到矩阵的高
- width
- public int width()
- 得到矩阵的宽
- public static Mat ones(int rows,
- int cols,
- int type)
- public static Mat ones(int rows,
- put
- public int put(int row,
- int col,
- byte[] data)
- public int put(int row,
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 eitherTHRESH_BINARY
orTHRESH_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。 如果contouri
不存在对应的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建立层次结构.
- CV_RETR_EXTERNAL 只生成最外层的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.
- CV_CHAIN_APPROX_NONE stores absolutely all the contour points. That is, any 2 subsequent points
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的更多相关文章
- Java数据持久层框架 MyBatis之API学习八(Java API详解)
对于MyBatis的学习而言,最好去MyBatis的官方文档:http://www.mybatis.org/mybatis-3/zh/index.html 对于语言的学习而言,马上上手去编程,多多练习 ...
- android学习五---OpenCV for android环境搭建
学习android的目的是想在手机上实现计算机视觉的算法.一般算法的研究都是在Matlab上进行,但是手机平台没有那么多的计算资源,用matlab显然是不太现实的.而OpenCV是基于C++语言编写的 ...
- Android学习六---OpenCV for android samples
搭建好OpenCV4Android环境后,就要着手开发自己的应用了.对于一个没有OpenCV基础的人来开发OpenCV应用确实有点难度,不过我们可以从samples里学起,结合javadoc和万能的网 ...
- 【Android】完善Android学习(三:API 3.0)
备注:之前Android入门学习的书籍使用的是杨丰盛的<Android应用开发揭秘>,这本书是基于Android 2.2API的,目前Android已经到4.4了,更新了很多的API,也增 ...
- Android学习探索之Java 8 在Android 开发中的应用
前言: Java 8推出已经将近2年多了,引入很多革命性变化,加入了函数式编程的特征,使基于行为的编程成为可能,同时减化了各种设计模式的实现方式,是Java有史以来最重要的更新.但是Android上, ...
- 学习android学习必备的java基础知识--四大内部类
学习android必备的java基础知识--四大内部类 今天学习android课程,因为我的主专业是JAVA,但是兴趣班却有这其他专业的同学,学习android 需要具备一些java的基础知识,因此就 ...
- opencv java api提取图片sift特征
opencv在2.4.4版本以后添加了对java的最新支持,可以利用java api了.下面就是我利用opencv的java api 提取图片的sift特征. import org.opencv.co ...
- 【Android】完善Android学习(七:API 4.0.3)
备注:之前Android入门学习的书籍使用的是杨丰盛的<Android应用开发揭秘>,这本书是基于Android 2.2API的,目前Android已经到4.4了,更新了很多的API,也增 ...
- 【Android】完善Android学习(六:API 4.0)
备注:之前Android入门学习的书籍使用的是杨丰盛的<Android应用开发揭秘>,这本书是基于Android 2.2API的,目前Android已经到4.4了,更新了很多的API,也增 ...
随机推荐
- 小型web服务器thttpd的学习总结(下)
1.主函数模块分析 对于主函数而言,概括来说主要做了三点内容,也就是初始化系统,进行系统大循环,退出系统.下面主要简单阐述下在这三个部分,又做了哪些工作呢. 初始化系统 拿出程序的名字(argv[0] ...
- sql 联合查询
SELECT NZD_Products.Prd_typename a FROM dbo.NZD_Products where dbo.NZD_Products.Prd_barcodenumber = ...
- 重写(Override)
重写(Override) 重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变.即外壳不变,核心重写! 重写的好处在于子类可以根据需要,定义特定于自己的行为. 也就是说子类 ...
- Android开源-NineOldAndroids
开源地址: https://github.com/JakeWharton/NineOldAndroids 简单介绍:NineOldAndroids是一款支持在低版本号开发的Android动画的框架 包 ...
- win7(64位)+vs2008配置Directshow
参考链接:http://zhuyanfeng.com/archives/1663 PC环境:win7 64bit + vs2008 1.下载64位的win7 SDK2.安装过程中遇到错误(必须要卸载v ...
- 6、手把手教React Native实战之JSX入门
React是由ReactJS与React Native组成,其中ReactJS是Facebook开源的一个前端框架,React Native是ReactJS思想在native上的体现! JSX并不是一 ...
- SurvivalShooter学习笔记(七.玩家射击)
玩家射击:(这个脚本放在玩家的空子物体上,这个位置为枪口位置) 点击鼠标,玩家射击: 射击枪口发光,射击通过射线,方向有激光效果:(关于射线不明白可以参考Unity射线相关) 射击有射击音效 射击有每 ...
- Android获取 应用程序大小,数据大小,缓存大小
在项目中创建,android.content.pm 包名.里面创建两个aidl文件.PackageStats.aidl 和 IPackageStatsObserver.aidl. PackageSt ...
- 如何使用HTTP压缩优化服务器
鉴于互联网上的宽带有限,网络管理人员任何旨在加速接入速度的努力都是有价值的.其中的一个方法就是通过HTTP压缩技术实现接入速度的加速,它通过减少在服务器和客户端之间传输的数据量,显著地提高网站的性能. ...
- python之进制转换
Python中二进制是以0b开头的: 例如: 0b11 则表示十进制的3 8进制是以0开头的: 例如: 011则表示十进制的9 16进制是以0x开头的: 例如: 0x11则表示十进制 ...