OpenCV是一个跨平台的计算机视觉和机器学习软件库,它实现了图像处理和计算机视觉方面的很多通用算法,是计算机视觉开发人员必须掌握的技术。   笔者的拙作《Java+OpenCV高效入门》对OpenCV中各种算法全面系统地进行了介绍,并给出了100多个示例程序,但是,这些示例相对简单,只能实现较为单一的功能。与此不同的是,本书采用项目主导的方式,每个项目都需要综合运用多种算法来完成一项较为复杂的任务。   爱因斯坦曾经说过:“兴趣是最好的老师。”笔者最初对OpenCV的研究也是兴趣使然,因此,本书选择的大多是“有趣而实用”的项目,例如魔方图案识别、答题卡评分、围棋盘面识别、车牌定位与识别、银行卡卡号识别等。这些项目的实现实际上是将它们拆解成若干功能模块后用OpenCV算法各个击破的过程。当然,各个算法之间的衔接也很重要,因为OpenCV涉及众多数据结构,A算法的输出往往并不能直接用于B算法的输入,而是需要经过某种转换。这种转换对初学者来讲是一个不小的难点,书中会有相应的说明。   为了便于阅读和理解,本书采用模块化编程,一个功能模块对应一个或多个函数。函数尽量具备通用性,不少函数甚至可以原封不动地搬到其他项目中直接调用。所有这些考虑只有一个目的:帮助读者加深对OpenCV的理解,早日进入OpenCV项目开发的自由王国。 本书主要内容   本书共15章,主要内容如下:   第1章介绍OpenCV的基础知识及Java+OpenCV开发环境的搭建。   第2章介绍魔方图案识别中涉及的主要算法及实现步骤。   第3章介绍答题卡评分中涉及的主要算法及实现步骤。   第4章介绍围棋盘面识别中涉及的主要算法及实现步骤。   第5章介绍停车场车位检测中涉及的主要算法及实现步骤。   第6章介绍车道线检测中涉及的主要算法及实现步骤。   第7章介绍汉字识别中各关键步骤的原理及实现步骤。   第8章介绍Tess4J这一OCR工具的安装、配置及如何利用该工具对英文和中文文字进行识别。   第9章介绍车牌定位与识别的主要算法及实现步骤。   第10章介绍硬币识别的主要算法及实现步骤。   第11章介绍零件检测的主要算法及实现步骤。   第12章介绍银行卡卡号识别的主要算法及实现步骤。   第13章介绍全景拼接的原理、涉及的主要算法及实现步骤。   第14章介绍二维码的基础知识、OpenCV中相关函数及具体识别过程。   第15章介绍Deeplearning4J这一深度学习框架,以及如何用机器学习算法实现手写文字的识别。   各章均附有完整的代码供读者学习参考,可扫描目录上方二维码下载。 阅读建议   本书与《Java+OpenCV?高效入门》配套学习效果更佳。对于初学者而言,先阅读《Java+OpenCV高效入门》的内容将大有裨益。   本书第1章总体介绍及开发环境搭建,对这部分比较熟悉的读者可以跳过。后面的章节基本上相互独立,但是最佳阅读顺序仍然是按顺序阅读,原因有二:一是某些案例中有个别步骤是相同的,有关原理在前面章节介绍过之后就不再重复了;二是某些案例要用到之前章节中安装的库,例如第9章的车牌定位与识别就需要用到第8章介绍的Tess4J库,因此,按顺序阅读的效率是最高的。当然,只对某些案例感兴趣的读者也可直接阅读相关章节,当遇到问题时再翻阅前面章节或相关书籍。 致谢   感谢我的家人,感谢你们一直以来对我的理解和支持!   本书的写作得到了清华大学出版社赵佳霓编辑的大力帮助,在此深表感谢!   由于本书涉及内容广泛,加上笔者水平有限,因此难免存在疏漏之处,还请各位读者不吝批评指正。    姚利民   2024年1月 II III