全书共分为12章,全面系统地讲述了OpenCV3和Qt5的核心内容,包括:OpenCV和Qt介绍、创建OpenCV和Qt项目、Mat和QImage、图形视图框架、OpenCV中的图像处理、特征与描述符、多线程、视频分析、视频稳定性、调试与测试、链接与部署、Qt Quick应用程序等。为了便于学习与实践,本书提供了示例算法的编码实现。也向读者全面详尽地介绍了基于OpenCV和Qt进行图像处理、计算机视觉等编程的技术和方法。
QtQt
检测、自动驾驶汽车的行人检测,如此等等,计算机视觉都已经逐步用于解决这些以往需要人工介入才能解决的实时问题,这些都是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出版公司所有人的帮助,使得这本书能够顺利完成,并能够送达世界各地的读者手中。
本书适合的读者
本书是为那些对创建计算机视觉应用程序感兴趣的读者准备的。如果你具备C++编程的中级知识,即使没有Qt5和OpenCV 3的知识,只要熟悉这些框架,也会获益匪浅。
本书包含的内容
第1章将介绍所有必需的初始工作。首先介绍从何处以及如何获得Qt和OpenCV框架,然后介绍如何安装、配置并确保在开发环境中对所有内容进行正确设置。
第2章将介绍Qt Creator IDE,我们将使用它开发所有应用程序。在该章中,你将学习如何创建并运行应用程序项目。
第3章将介绍创建一个完整应用程序所需的最常见功能,包括样式、国际化以及对各种语言、插件的支持等。通过该过程,我们将独立创建一个完整的计算机视觉应用程序。
第4章列出了编写计算机视觉应用程序所需的基本概念。你将了解OpenCV Mat类和Qt QImage类的所有内容,以及如何在两个框架之间转换和传递这些类等内容。
第5章将介绍如何使用Qt图形视图框架及其底层类,以便在应用程序中方便、有效地显示和操作图形。
第6章将介绍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应用程序和QML语言。你将学习QML语言语法,以及如何结合Qt Quick Designer创建美观的用于桌面和移动平台的Qt Quick应用程序。在该章中,还将学习如何集成QML和C++。
最佳配置
尽管在本书前几章介绍了所有必需的工具和软件、正确的版本及其安装与配置方法,但还是有必要提供一个快速参考列表:
安装了最新版本的Windows、macOS或Linux(如Ubuntu)操作系统的普通电脑
Microsoft Visual Studio(Windows)
Xcode(macOS)
CMake
Qt框架
OpenCV框架
通过上网搜索或者咨询当地的商店,可以了解目前电脑的通行配置与功能。然而,一台普通电脑已经足够开始你的学习之旅。
下载示例代码及彩色图像
本书的示例代码及所有截图和样图,可以从http://www.packtpub.com通过个人账号下载,也可以访问华章图书官网http://www.hzbook.com,通过注册并登录个人账号下载。
译者序
序
前言
评阅者简介
第1章 OpenCV和Qt简介1
1.1 需要什么2
1.2 Qt介绍3
1.2.1 Qt基本模块3
1.2.2 Qt扩展4
1.2.3 附加值模块4
1.2.4 技术预览模块5
1.2.5 Qt支持的平台5
1.2.6 Qt Creator6
1.3 OpenCV介绍7
1.3.1 主模块8
1.3.2 附加模块8
1.4 安装Qt9
1.4.1 Qt安装准备9
1.4.2 在哪里获得Qt10
1.4.3 安装方法11
1.4.4 测试Qt安装14
1.5 安装OpenCV19
1.5.1 为构建OpenCV做准备19
1.5.2 在哪里获得OpenCV19
1.5.3 如何构建20
1.5.4 配置OpenCV安装23
1.5.5 测试OpenCV安装25
1.6 小结27
第2章 创建第一个Qt + OpenCV项目28
2.1 什么是Qt Creator29
2.2 IDE一览30
2.2.1 Qt Creator的模式30
2.2.2 Qt Creator的选项窗口58
2.3 小结61
第3章 创建完整的Qt + OpenCV项目62
3.1 后台63
3.1.1 qmake工具63
3.1.2 元对象编译器(moc)65
3.1.3 用户界面编译器(uic)66
3.2 设计模式67
3.3 Qt资源系统69
3.4 样式化应用程序73
3.4.1 选择器类型74
3.4.2 子控件75
3.4.3 伪状态75
3.4.4 级联75
3.5 多语言支持77
3.6 创建和使用插件81
3.6.1 接口82
3.6.2 插件84
3.6.3 插件加载器和用户88
3.7 创建基础94
3.8 小结96
第4章 Mat和QImage97
4.1 关于Mat类的所有内容98
4.1.1 构造函数、属性与方法100
4.1.2 Mat_<_Tp>类107
4.1.3 Matx<_Tp, m, n>107
4.1.4 UMat类108
4.1.5 InputArray、OutputArry、InputOutputArray108
4.2 利用OpenCV读取图像109
4.3 利用OpenCV写入图像110
4.4 OpenCV中的视频读写110
4.5 OpenCV中的HighGUI模块112
4.6 Qt中的图像和视频处理113
4.6.1 QImage类113
4.6.2 QPixmap类116
4.6.3 QImageReader与QImageWriter类119
4.6.4 QPainter类119
4.6.5 Qt中的相机和视频处理124
4.7 小结125
第5章 图形视图框架126
5.1 场景视图对象元素架构127
5.2 场景QGraphicsScene130
5.3 对象元素QGraphicsItem134
5.4 视图QGraphicsView142
5.5 小结152
第6章 基于OpenCV的图像处理153
6.1 图像滤波154
6.2 图像变换功能168
6.2.1 几何变换168
6.2.2 其他变换174
6.3 OpenCV绘图180
6.4 模板匹配183
6.5 小结185
第7章 特征及其描述符187
7.1 所有算法的基础—Algorithm类188
7.2 二维特征框架191
7.2.1 检测特征192
7.2.2 提取和匹配描述符204
7.3 如何选择算法211
7.3.1 精度212
7.3.2 速度212
7.3.3 资源利用率213
7.3.4 可用性213
7.4 小结213
第8章 多线程215
8.1 Qt中的多线程216
8.2 利用QThread实现低级多线程217
8.2.1 子类化QThread217
8.2.2 使用moveToThread函数222
8.3 线程同步工具224
8.3.1 互斥锁224
8.3.2 读写锁226
8.3.3 信号量228
8.3.4 等待条件228
8.4 基于QtConcurrent的高级多线程230
8.5 小结235
第9章 视频分析237
9.1 理解直方图238
9.2 理解反投影图像242
9.2.1 直方图比较250
9.2.2 直方图均衡化252
9.3 MeanShift算法和CamShift算法253
9.4 背景/前景检测260
9.5 小结263
第10章 调试与测试265
10.1 Qt Creator调试266
10.2 Qt测试框架271
10.2.1 创建单元测试272
10.2.2 数据驱动的测试276
10.2.3 基准测试278
10.2.4 GUI 测试278
10.2.5 测试用例项目281
10.3 小结283
第11章 链接和部署285
11.1 后台构建过程286
11.1.1 预处理286
11.1.2 编译286
11.1.3 链接287
11.2 构建OpenCV静态库288
11.3 构建Qt静态库289
11.4 部署Qt + OpenCV应用程序295
11.4.1 使用静态链接部署295
11.4.2 使用动态链接部署297
11.4.3 Qt安装程序框架299
11.5 小结302
第12章 Qt Quick应用程序304
12.1 QML介绍305
12.2 QML中的用户交互和脚本310
12.3 Qt Quick Designer的使用312
12.4 Qt Quick应用程序的结构313
12.5 集成C++和QML代码318
12.6 Android和iOS上的Qt和OpenCV应用程序324
12.7 小结326