跳转至

零、前言

我们正在进入智力时代。 如今,越来越多的数字设备和应用提供了人工智能技术所促进的功能。 计算机视觉技术是人工智能技术的重要组成部分,而 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 并注册以将文件直接通过电子邮件发送给您。

您可以按照以下步骤下载代码文件:

  1. 登录或注册 www.packt.com
  2. 选择支持选项卡。
  3. 单击代码下载和勘误。
  4. 在搜索框中输入书籍的名称,然后按照屏幕上的说明进行操作。

下载文件后,请确保使用以下最新版本解压缩或解压缩文件夹:

  • 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 提示符,其后的文本是命令。 不以$开头的行是前面命令的输出。

警告或重要提示如下所示。

提示和技巧如下所示。

保持联系

始终欢迎读者的反馈。



回到顶部