Java+OpenCV高效入门
上QQ阅读APP看书,第一时间看更新

前言

OpenCV是一个开源的计算机视觉库,它实现了图像处理和计算机视觉方面很多通用的算法。免费开源而又强大,这些特性使OpenCV日益成为计算机视觉领域中一个不可或缺的重要工具。OpenCV同时提供了C++、Java和Python的接口,但是目前OpenCV的教程主要以Python和C++为主,而基于Java的教程则近乎空白,本书旨在弥补这一空白。

Java是一门优秀的跨平台的编程语言,它脱胎于C++,同时摒弃了指针和多继承等特别复杂的东西,因而受到广泛欢迎。无论是Java语言还是OpenCV,相关的资料都已经相当丰富,但是,基于Java的OpenCV开发仍然有着不小的难度。首先,OpenCV有着众多的数据类型,例如,最核心的Mat(矩阵)类就有MatOfInt、MatOfPoint、MatOfPoint2f、MatOfRect等十几个子类。OpenCV中各种函数的参数类型各不相同,因而在完成某一任务时需要进行各种数据类型的转换,而这对于初学者来讲是有着相当难度的。其次,用Java语言调用OpenCV函数时很多参数需要加上模块名,而参数和模块名的搭配又很容易搞错。再次,Java的数据类型与OpenCV并不完全兼容。例如,Java中byte类型的取值范围为−128~127,而OpenCV中像素值的取值范围通常为0~255,如果不加注意,则程序调用的结果往往与预期大相径庭。毫无疑问,一本精心编写的入门教程将为初学者早日“登堂入室”节省大量宝贵的时间。作为一个过来人,笔者将众多的经验和心得融入本书,希望读者阅读本书后能够少走弯路,早日步入OpenCV的神奇殿堂!

本书主要内容

本书是一本基于Java的OpenCV入门级教程,目标是让各类型的初学者在最短时间内掌握OpenCV的编程技巧。全书共13章,各章主要内容如下:

第1章首先介绍OpenCV的发展历程、主要模块等内容,然后介绍OpenCV的下载、安装和配置,并通过一个OpenCV程序进行验证,最后归纳总结了Eclipse和Java的一些必备知识。

第2章主要介绍数字图像的基础、OpenCV中的Mat类及相关操作、OpenCV中常用的数据结构等。

第3章介绍图像的读写显示、常用的绘图函数及颜色空间操作。

第4章介绍图像的算术运算、逻辑运算、二值化和查找表等阈值操作及图像金字塔等内容。

第5章介绍图像的几何变换,包括平移、旋转、缩放、仿射变换、透视变换等。

第6章介绍与图像平滑相关的内容,包括图像噪声、滤波器、线性滤波和非线性滤波。

第7章首先介绍像素的距离和邻域等基本概念,然后介绍膨胀、腐蚀及形态学操作。

第8章介绍直方图及模板匹配的相关内容。

第9章介绍边缘检测算子、Canny边缘检测、轮廓检测、轮廓特征等内容。

第10章介绍霍夫变换的原理、霍夫线检测和霍夫圆检测的内容。

第11章介绍角点检测、特征点检测及特征点匹配等内容。

第12章首先介绍机器学习的相关内容,包括K均值、K近邻、决策树、随机森林、SVM等,然后介绍人脸检测的相关内容。

第13章介绍视频的基础操作及均值迁移法、背景建模、光流估计等目标追踪技术。

本书详细介绍了近120个OpenCV函数,并给出了100多个示例程序,力求让读者在最短时间内掌握基于Java的OpenCV编程技术。

阅读建议

本书是一本面向初学者的入门级教程。为了适合各类型读者的需要,本书采用了OpenCV 3.4.16和4.6.0两个版本,前者比较稳定,后者则是截稿时的最新版本,书中所有代码均在这两个版本中进行了测试。在3.4.16版本中,所有代码均可不加修改地正常运行,而在4.6.0版本中,除了Draw2.java和Draw3.java两个程序需要略作修改(参见代码说明)外,其余程序也均能正常运行。另外,本书详细介绍了近120个常用的OpenCV函数并列出了相关参数(含相应模块名),因而也可以作为备查的工具书使用。

本书内容由浅入深,因此建议读者按顺序阅读。在了解OpenCV的基础知识后,建议按第1章相关内容搭建开发环境并写出第1个OpenCV程序。第1个程序的顺利运行将增强读者的信心并激发学习的兴趣。第2章的内容属于基础中的基础,掌握这一章的内容对后面的学习很重要,建议不要跳过。第3章和第4章则是一些基础算法,后面不少高级算法都建立在这些算法的基础之上。

第5~11章属于进阶内容,通常会先介绍相关概念或算法原理,然后给出程序实例。对于这些章节建议读者先通读一遍,以便了解概念和原理,然后边运行程序边加深对算法的理解。

第12章和第13章涉及机器学习和视频分析等较为高级的内容,代码也会比较长。不过代码中的详细注释会帮助读者理清思路,建议读者在掌握了前面的基础算法后再学习这两章。

致谢

感谢我的家人,感谢你们一直以来对我的理解和支持!

本书的写作也得到了清华大学出版社赵佳霓编辑的大力帮助,在此深表感谢!

由于本书涉及内容广泛,加上笔者水平有限,因此难免存在疏漏之处,还请各位读者不吝批评指正。

姚利民

2023年3月