本书是一本通过OpenCV 4来讲解算法的入门书。全书共分为4个部分,第一部分包括第1~3章,主要有OpenCVr入门知识、OpenCV 的图像读写模块和和辛苦core模块讲解;第二部分包括第4~7章,主要有头像处理imgproc模块、视频处理videoio模块和可视化highgui模块、视频分析video模块讲解;第三部分包括第8~10章,主要有2d特征框架feature2d模块、照片处理photo模块、目标检测objdetect模块讲解;第四部分包括第11~12章,包括有深度神经网络dnn模块和机器学习ml模块等众多内容讲解。
OpenCV,模版化,行业首选
北宋大家张载的“横渠四句”非常有名,“为天地立心,为生民立命,为往圣继绝学,为万世开太平”,历史上很多名人以之作为安身立命追求事业的勉励语。第一次读这句名言时,我非常激动,现在也时常想起,虽无法实现却也心向往之。
有幸与电子工业出版社再次合作,个人能力浅薄,不敢妄谈“为往圣继绝学”,但也希望自己的书有一些实用价值,能在技术传播中贡献一份绵薄之力。在写作前,刘伟老师(本书编辑)和我反复推敲写作的目的是什么,这本书与别的图书有什么不同,能给读者带来什么帮助等命题。我们围绕上述命题提出了如下 4 个问题:为什么要学习图像处理?为什么要选用 OpenCV?为什么要用OpenCV 4?这本书与别的图书有什么不同?
下面就通过对这 4 个问题的回答来介绍一下本书,让读者能够对本书的写作目的、写作思路,以及如何参考本书进行 OpenCV 的学习有一个初步的理解。
为什么要学习图像处理?
图像处理之所以重要,是因为人类对认知世界的需要。
我们都知道,当前智能手机的普及率非常高,当看到美景或有事情发生时,几乎所有人都会拿起手机拍照或录制视频,并将它们分享在各大平台。爱美之心,人皆有之,因此,相机软件也集成了越来越多的功能,如美颜、滤镜等,其中很多功能都是在照片采集后通过图像处理技术实现的。
各大手机厂商不遗余力地升级拍照或摄像功能,为了让用户能存储更多的照片和视频而不断提升手机的存储空间,这些都证明了用户对图像和视频的需求非常强烈,从侧面也反映了图像处理技术的广阔市场前景。
为什么要选用 OpenCV?
OpenCV 之所以大行其道,是因为其简单易用。
作为一个开源的计算机视觉库,OpenCV 由 C++语言编写,读者可以通过阅读源码对算法的实现细节进行学习,可读性好。另外,OpenCV 还实现了很多图像处理和计算机视觉中的通用算法,在 Linux、Windows、Android 和 macOS 等操作系统上均可运行,即一套代码能在多种系统中运行,通用性好。
OpenCV 支持 C++、Python、Java 等语言和 MATLAB 等多种程序接口,在最新版本中还提供了对 C#、Ch、Ruby、Go 语言的支持,不同语言中的接口名称和参数差异较小,用户在不同的开发环境中只需改写少量代码即可使用,一致性好。
OpenCV 在图像处理领域深耕多年,不仅对算法做了很多优化,还针对实用场景做了加速处理,如支持对 CUDA 等硬件的加速。另外,它还可以通过引入 Intel 的 IPP 高性能多媒体函数库获得更高的运行处理速度,高效性好。
OpenCV 大受欢迎还有一个重要的原因,就是当前深度学习和计算机视觉的飞速发展。在计算机视
| OpenCV 4 快速入门:基于 Python 的算法实战 |
觉中进行模型训练和使用时,需要对输入图像做很多预处理和后处理,这些都需要用到 OpenCV 库。OpenCV 中很多算法的实现可以弥补深度学习模型推理耗时的缺陷,在某些特定场景下,OpenCV 中的传统算法可以获得与深度学习方法相差不大的结果,但在执行速度上远胜于深度学习方法,应用性好。
为什么要用 OpenCV 4?
不管什么软件,新版本的出现基本上都是因为对旧版本的代码做了很大力度的重构或增加了很多新特性,已经无法与旧版本兼容。
OpenCV 4 版本升级中废弃了一些旧的 API,对一些枚举类型的名称写法做了修改,对一些函数的参数做了调整,还有一个比较重要的变化就是增加了对 dnn 模块的支持。如果读者目前使用的是 OpenCV 3,那么也不必对这些变化有过多的焦虑,因为 OpenCV 的错误提示清晰易懂,错误定位与修改均比较快速、简单。
此外,建议读者在学习一门新技术时,最好选用较新的软件版本,因为很多软件在发展过程中会逐渐停止对旧版本的支持。
这本书与别的图书有什么不同?
OpenCV 对图像处理和计算机视觉算法做了系统封装,这些算法被划分为很多模块,其中最重要的就是 core 模块(第 3 章)和 imgproc 模块(第 4 章和第 5 章),而很多同类图书的内容就是围绕这两个模块展开的,但是本书内容没有局限于此。
本书以 OpenCV 模块来分章节作为写作思路,在每章的开始都有对模块的导读,导读内容依托OpenCV 源码,讲述了本模块封装的算法函数,对其中的函数和数据结构做了清晰明了的注释,因此, 导读内容既可以为读者学习算法提供帮助,又可以为读者开发查询提供参考。
本书在第 1 章讲述了 C++开发语言和 Python 开发语言,以及 Windows 和 Linux 系统中的OpenCV 开发环境的搭建,只要读者按照案例中的操作步骤执行,就能够顺利地运行 OpenCV 库,不必为开发环境搭建中的各种问题焦头烂额。
core 模块和 imgproc 模块的重要性毋庸置疑,本书也针对这两个模块总结了很多案例,对这两个模块的算法做了透彻的讲解。但对于其他模块,如可视化模块 highgui、视频处理模块 videoio、视频分析模块 video、照片处理模块 photo、2D 特征模块 features2d、相机标定与三维重建模块 calib3d、传统目标检测模块 objdetect、机器学习模块 ml、深度学习模块 dnn,在其他图书中鲜有涉及,而本书对这些模块都做了详细导读和案例讲解。
这种系统化的讲解能够让读者对 OpenCV 有一个全面的认识,也能够让读者有机会了解 OpenCV 的强大功能,为读者在处理特殊需求时提供知识储备。
最后,感谢家人、朋友和出版社对本书写作的支持。希望本书能够给对 OpenCV 和图像处理有需求的读者以帮助,对于书中的疏漏之处,请不吝指教。如果有深度学习和计算机视觉学习需求的读者,敬请关注我的另一本图书《深度学习计算机视觉实战》,该书对深度学习和计算机视觉算法的基础、图像处理基础、计算机视觉案例、TensorFlow Lite,以及基于 TensorFlow Lite 在移动端和 PC 端的部署做了一站式的讲解,在此对您的支持表示衷心的感谢。
请提供源码资料