零、前言
我们正在进入智力时代。 如今,越来越多的数字设备和应用提供了人工智能技术所促进的功能。 计算机视觉技术是人工智能技术的重要组成部分,而 OpenCV 库是计算机视觉技术最全面,最成熟的库之一。 OpenCV 超越了传统的计算机视觉技术。 它结合了许多其他技术,例如 DNN,CUDA,OpenGL 和 OpenCL,并且正在发展为功能更强大的库。 但是,与此同时,它的 GUI 功能(不是库的主要功能)并没有发展太多。 同时,在许多 GUI 开发库和框架中,Qt 库是最适合跨平台,具有最佳易用性和最大的控件多样性的库和框架。 本书的目标是将 OpenCV 和 Qt 结合起来,以开发出具有许多有趣功能的成熟应用。
本书是使用 Qt 开发 OpenCV 库和 GUI 应用的实用指南。 我们将在每一章中开发一个完整的应用。 在这些应用的每一个中,将涵盖许多计算机视觉算法,Qt 小部件和其他功能,并将创建具有功能特征的精心设计的用户界面。
这本书是几个月努力工作的结果,没有 Packt 团队和技术审核员的宝贵帮助,这是不可能的。
这本书是给谁的
本书适用于所有想知道如何使用 OpenCV 库处理图像和视频的开发人员,适合那些希望通过 Qt 学习 GUI 开发的人员,以及想要知道如何在计算机视觉中使用深度学习的开发人员。 领域,以及那些对开发成熟的计算机视觉应用感兴趣的人。
本书涵盖的内容
第 1 章,“构建图像查看器”涵盖了使用 Qt 构建我们的第一个应用。 我们将构建一个图像查看器,通过它可以浏览文件夹中的图像。 我们还可以在查看图像时放大或缩小图像。
第 2 章,“像高手一样编辑图像”,结合了 Qt 库和 OpenCV 库来构建一个新的应用,即图像编辑器。 在本章中,我们将从模糊图像开始,以学习如何编辑图像。 然后,我们将学习如何使用许多其他编辑效果,例如腐蚀,锐化,卡通效果和几何变换。 这些功能中的每一个都将作为 Qt 插件被合并,因此 Qt 库的插件机制也将被涵盖。
第 3 章,“家庭安全应用”涵盖了构建家庭安全应用的过程。 借助网络摄像头,该应用可以检测到运动并在检测到运动时向移动电话发送通知。 在本章中,我们将学习如何处理摄像机和视频,如何使用 OpenCV 分析运动并检测运动,以及如何通过 IFTTT 发送通知。
第 4 章,“面部表情”探索了如何使用 OpenCV 检测面部和人脸标志。 在本章中,我们将构建一个应用以实时检测视频中的面部和面部地标,并且在检测到面部地标后,将对面部应用一些有趣的遮罩。
第 5 章,“光学字符识别”向您介绍 Tesseract 库。 借助此库,我们将从图像中提取文本,例如书页照片和扫描的文档。 为了从常见场景的照片中提取文本,我们将使用名为 EAST 的深度学习模型来检测照片中的文本区域,然后将这些区域传递到 Tesseract 库。 为了方便地在屏幕上提取文本,我们还将学习如何使用 Qt 库将屏幕抓取为图像。
第 6 章,“实时对象检测”显示了如何使用级联分类器检测对象。 除了使用预先训练的分类器,我们还将学习如何自行训练分类器。 然后,我们将介绍如何使用深度学习模型来检测对象,并且将使用名为 YOLOv3 的模型来演示此方法的用法。
第 7 章,“实时汽车检测和距离测量”涵盖了创建检测汽车和测量距离的应用。 在该应用中,我们将学习如何从鸟瞰视角测量物体之间的距离,以及如何在视线高度视图上测量物体与相机之间的距离。
第 8 章,“使用 OpenGL 进行图像的高速滤波”,这本书的最后一章介绍了一种异构计算方法。 在本章中,我们首先简要介绍 OpenGL 规范,然后使用它在 GPU 上过滤图像。 这不是使用 OpenGL 的典型方法,也不是进行异构计算的方法,因此,如果我们想以成熟的方式进行异构计算,则可以参考 OpenCL 或 CUDA。
附录 A,“答案”包含所有评估问题的答案。
充分利用这本书
为了获得本书的总体结果,必须满足以下先决条件:
- 您需要具有 C++ 和 C 编程语言的一些基本知识。
- 您需要安装 Qt v5.0 或更高版本。
- 您需要将网络摄像头连接到计算机。
- 还需要许多库,例如 OpenCV 和 Tesseract。 有关安装它们的说明,请参见首次使用每个库的章节。
- 深度学习和异构计算的知识将有助于理解某些章节。
下载示例代码文件
您可以从 www.packt.com 的帐户中下载本书的示例代码文件。 如果您在其他地方购买了此书,则可以访问 www.packt.com/support 并注册以将文件直接通过电子邮件发送给您。
您可以按照以下步骤下载代码文件:
- 登录或注册 www.packt.com 。
- 选择支持选项卡。
- 单击代码下载和勘误。
- 在搜索框中输入书籍的名称,然后按照屏幕上的说明进行操作。
下载文件后,请确保使用以下最新版本解压缩或解压缩文件夹:
- Windows 的 WinRAR/7-Zip
- Mac 的 Zipeg/iZip/UnRarX
- Linux 的 7-Zip/PeaZip
本书的代码包也托管在 GitHub 上。 如果代码有更新,它将在现有 GitHub 存储库上进行更新。
我们还从这里提供了丰富的书籍和视频目录中的其他代码包。 去看一下!
下载彩色图像
我们还提供了 PDF 文件,其中包含本书中使用的屏幕截图/图表的彩色图像。 您可以在此处下载。
行动中的代码
使用约定
本书中使用了许多文本约定。
CodeInText
:以文本,类或类型名称表示代码字。 这是一个示例:“Qt 项目文件ImageViewer.pro
应该重命名为ImageEditor.pro
。您可以在文件管理器或终端中执行此操作。”
代码块设置如下:
QMenu *editMenu;
QToolBar *editToolBar;
QAction *blurAction;
当我们希望引起您对代码块特定部分的注意时,将在行尾添加注释:
// for editting
void blurImage();
任何命令行输入或输出的编写方式如下:
$ mkdir Chapter-02
$ cp -r Chapter-01/ImageViewer/ Chapter-02/ImageEditor
$ ls Chapter-02
ImageEditor
$ cd Chapter-02/ImageEditor
$ make clean
$ rm -f ImageViewer
$
符号是 shell 提示符,其后的文本是命令。 不以$
开头的行是前面命令的输出。
警告或重要提示如下所示。
提示和技巧如下所示。
保持联系
始终欢迎读者的反馈。