零、前言
成为软件开发人员的时间比以往任何时候都没有。 只要环顾四周,就很可能会看到至少两个不同的设备,例如计算机,智能手机,智能手表或平板电脑,上面运行着一些应用,可以帮助您完成各种日常任务或娱乐音乐,看电影 ,视频游戏等。 每年,市场上都会引入数百种新设备,并且需要新版本的操作系统来跟上它们,以便为应用开发人员提供更好的界面,以创建可更好地利用诸如高分辨率等基础资源的软件。 显示器,各种传感器等。 结果,软件开发框架必须适应并支持不断增长的平台。 考虑到这一点,Qt 可能是同时提供功能,速度,灵活性和易用性的最成功的跨平台软件开发框架之一,在创建需要以下功能的软件时,它是首选。 在各种平台上都具有吸引力和一致性。
近年来,特别是随着功能更强大的处理器以较低的价格出现,台式计算机及其手持式对等设备的角色已转向执行更苛刻和更复杂的任务,例如计算机视觉。 无论是用于智能电影或照片编辑,保护敏感建筑物,对生产线中的物体计数,还是通过自动驾驶汽车检测交通标志,车道或行人,计算机视觉正越来越多地用于解决此类实时问题。 曾经只能由人类解决的问题。 这是 OpenCV 框架进入现场的地方。 在过去的几年中,OpenCV 已成长为功能完善的跨平台计算机视觉框架,其重点是速度和性能。 在世界各地,开发人员和研究人员都在使用 OpenCV 来实现其计算机视觉应用的思想和算法。
本书旨在帮助您掌握 Qt 和 OpenCV 框架的基本概念,使您轻松地自己继续开发和交付跨多种平台的计算机视觉应用。 能够轻松遵循本书所涵盖主题的唯一假设是,您熟悉并熟悉 C++ 编程概念,例如类,模板,继承等。 即使整本书中涵盖的教程,屏幕截图和示例都是基于 Windows 操作系统的,但仍会在必要时提及 MacOS 和 Linux 操作系统的区别。
这本书是几个月努力工作的结果,没有劳伦斯·韦加斯(Lawrence Veigas)的宝贵帮助,他的完美编辑是不可能的。 卡尔·菲利普·布尔(Karl Phillip Buhr)诚实而有见地的评论; 帕塔·科塔里(Parth Kothari),没有他,这本书就不可能实现; 还有 Zainab Bootwala,Prajakta Naik,Aaron Lazar,Supriya Thabe,Tiksha Sarang,Rekha Nair,Jason Monteiro,Nilesh Mohite,以及 Packt Publishing 的所有人都为您以及世界各地的读者制作并发行了这本书 。
这本书是给谁的
本书面向有兴趣构建计算机视觉应用的读者。 期望具备 C++ 编程的中级知识。 即使没有 Qt5 和 OpenCV 3 知识,但如果您熟悉这些框架,您也会受益。
本书涵盖的内容
第 1 章,“OpenCV 和 Qt 简介”进行了所有必需的初始化。 从何处以及如何获得 Qt 和 OpenCV 框架开始,本章将介绍如何安装,配置并确保在开发环境中正确设置了所有内容。
第 2 章,“创建我们的第一个 Qt 和 OpenCV 项目”,带您完成 Qt Creator IDE,我们将使用它来开发所有应用。 在本章中,您将学习如何创建和运行应用项目。
第 3 章,“创建综合的 Qt + OpenCV 项目”经历了综合应用所需的最常见功能,包括样式,国际化以及对各种语言,插件等的支持。 上。 通过此过程,我们将自己创建一个全面的计算机视觉应用。
第 4 章,“Mat
和QImage
”奠定了基础,并教您编写计算机视觉应用所需的基本概念。 在本章中,您将学习有关 OpenCV Mat
类和 Qt QImage
类的所有知识,以及如何在两个框架之间进行转换和传递等等。
第 5 章,“图形视图框架”教您如何使用 Qt 图形视图框架及其基础类,以便轻松,有效地显示和操纵应用中的图形。
第 6 章,“OpenCV 中的图像处理”指导您完成 OpenCV 框架提供的图像处理功能。 您将了解有关转换,过滤器,色彩空间,模板匹配等的信息。
第 7 章,“特征和描述符”都是关于从图像中检测关键点,从关键点提取描述符并将它们相互匹配的。 在本章中,您将学习各种关键点和描述符提取算法,并最终使用它们来检测和定位图像中的已知对象。
第 8 章,“多线程”教给您有关 Qt 框架提供的多线程功能的全部信息。 您将学习互斥锁,读写锁,信号灯和各种线程同步工具。 本章还将向您介绍 Qt 中的低级(QThread
)和高级(QtConcurrent
)多线程技术。
第 9 章,“视频分析”涵盖了如何使用 Qt 和 OpenCV 框架正确处理视频。 您将学习使用 MeanShift 和 CAMShift 算法以及其他视频处理功能进行对象跟踪。 本章还全面概述了视频处理的所有基本概念,例如直方图和反投影图像。
第 10 章,“调试和测试”向您介绍 Qt Creator IDE 的调试功能以及如何配置和设置。 在本章中,您还将通过编写示例单元测试来了解 Qt 框架提供的单元测试功能,该示例单元测试可以在每次构建项目时手动或自动运行。
第 11 章,“链接和部署”教您动态或静态地构建 OpenCV 和 Qt 框架。 在本章中,您还将学习有关在各种平台上部署 Qt 和 OpenCV 应用的信息。 在本章的最后,我们将使用 Qt Installer 框架创建一个安装程序。
第 12 章,“Qt Quick 应用”向您介绍 Qt Quick 应用和 QML 语言。 在本章中,您将学习 QML 语言语法,以及如何将其与 Qt Quick Designer 一起使用来为台式机和移动平台创建漂亮的 Qt Quick 应用。 您还将在本章中学习如何集成 QML 和 C++。
充分利用这本书
虽然本书的初始章节涵盖了所有必需的工具和软件,正确的版本以及安装和配置的方式,但以下是可以用作快速参考的列表:
- 安装了 Windows,MacOS 或 Linux(例如 Ubuntu)操作系统最新版本的常规计算机。
- Microsoft Visual Studio(在 Windows 上)
- Xcode(在 MacOS 上)
- CMake
- Qt 框架
- OpenCV 框架
要了解当前的常规计算机是什么,可以在线搜索或询问当地商店。 但是,您已经拥有的一个很可能足以让您入门。
下载示例代码文件
您可以从 www.packtpub.com 的帐户中下载本书的示例代码文件。 如果您在其他地方购买了此书,则可以访问 www.packtpub.com/support 并注册以将文件直接通过电子邮件发送给您。
您可以按照以下步骤下载代码文件:
- 登录或登录 www.packtpub.com 。
- 选择支持选项卡。
- 单击代码下载和勘误。
- 在搜索框中输入书籍的名称,然后按照屏幕上的说明进行操作。
下载文件后,请确保使用以下最新版本解压缩或解压缩文件夹:
- Windows 的 WinRAR/7-Zip
- Mac 的 Zipeg/iZip/UnRarX
- Linux 的 7-Zip/PeaZip
本书的代码包也托管在 GitHub 上。 我们还从这里提供了丰富的书籍和视频目录中的其他代码包。 去看一下!
下载彩色图像
我们还提供了 PDF 文件,其中包含本书中使用的屏幕截图/图表的彩色图像。 您可以在此处下载。
使用约定
本书中使用了许多文本约定。
CodeInText
:指示文本,数据库表名称,文件夹名称,文件名,文件扩展名,路径名,虚拟 URL,用户输入和 Twitter 句柄中的代码字。 这是一个示例:“QApplication
类是负责控制应用的控制流,设置等的主要类。”
代码块设置如下:
#include "mainwindow.h"
#include
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
当我们希望引起您对代码块特定部分的注意时,相关行或项目以粗体显示:
#include "mainwindow.h"
#include
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
任何命令行输入或输出的编写方式如下:
binarycreator -p packages -c config.xml myinstaller
粗体:表示新术语,重要单词或您在屏幕上看到的单词。 例如,菜单或对话框中的单词会出现在这样的文本中。 这是一个示例:“单击下一步按钮将您移至下一个屏幕。”
警告或重要提示如下所示。
提示和技巧如下所示。