基本信息
- 出版社 : 机械工业出版社; 第1版 (2018年12月18日)
- 出版日期 : 2019年1月1日
- 品牌 : 北京华章图文信息有限公司
- 语言 : 简体中文
- 文件大小 : 123491 KB
- (伊朗)阿敏·艾哈迈迪·泰兹坎迪(Amin Ahmadi Tazehkandi) (作者), 刘冰 (译者), 郭坦 (译者)
- 下载格式:azw3、epub、mobi
内容简介
本书基于Qt和OpenCV搭建图像处理框架,用于计算机视觉、图像处理、模式识别和视频目标跟踪等领域。本书以常用类和函数的代码示例为主线,详细介绍了学习新版OpenCV和Qt中会遇到的各种问题及其相关解决方案。书中深入浅出地介绍了OpenCV 3和Qt5的强大功能、性能以及最新特性。根据书中提供的大量实用案例代码,读者可以快速熟悉和使用这两个开发框架。全书共分为12章,全面系统地讲述了OpenCV 3和Qt5的核心内容,包括OpenCV和Qt介绍、创建OpenCV和Qt项目、Mat和QImage、图形视图框架、OpenCV中的图像处理、特征及其描述符、多线程、视频分析、调试与测试、链接与部署、Qt Quick应用程序等。为了便于学习与实践,本书提供了示例算法的编码实现,也向读者全面详尽地介绍了基于OpenCV和Qt进行图像处理、计算机视觉等编程的技术和方法。
前言
前言
对软件开发人员而言,这是一个最好的时代。环顾四周,你很可能看到两三个运行着应用程序的不同设备,如电脑、智能手机、智能手表或者平板电脑。这些智能终端可帮助你完成各种日常任务,也方便你进行一些娱乐活动,如听音乐、看电影、玩电子游戏等。每年都有数以百计的新设备进入市场,这就需要新版本的操作系统跟上它们的步伐,为应用开发人员提供更好的接口,使他们能够更好地利用诸如高分辨率显示器、传感器等基础资源。因此,软件开发框架必须能够适应和支持不断涌现的新平台。考虑到这一点,Qt可能是最成功的跨平台软件开发框架之一,它在功能、运行速度、灵活性以及易用性等方面表现出色。在需要创建外观精致并且能够保持跨平台一致性的软件时,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出版公司所有人的帮助,使得这本书能够顺利完成,并能够送达世界各地的读者手中。
本书适合的读者
本书是为那些对创建计算机视觉应用程序感兴趣的读者准备的。如果你具备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框架
通过上网搜索或者咨询当地的商店,可以了解目前电脑的通行配置与功能。然而,一台普通电脑已经足够开始你的学习之旅。
下载示例代码及彩色图像
本书的示例代码及所有截图和样图,可以从//www.packtpub.com通过个人账号下载,也可以访问华章图书官网//www.hzbook.com,通过注册并登录个人账号下载。
精彩书摘
“计算机视觉”这一术语的最基本含义是指所有用来增强数字设备视觉效果的方法和算法。理想情况下,计算机应该能够通过一台标准相机(或其他类型的相机)的摄像头看见这个世界,并能通过各种计算机视觉算法来检测人脸,甚至对人脸进行识别,还能统计一个图像中的对象、检测视频信号中的动作,以及诸如此类的很多工作。乍一看,这只能是对人类才有的期望。了解计算机视觉的目标是理解计算机视觉的最好方式。计算机视觉的目标是开发出能完成上述工作的方法,让数字设备具有观察和理解周围环境的能力。值得注意的是,大多数情况下,计算机视觉和图像处理这两个术语是可以互换的(尽管对这一课题的历史研究表明,计算机视觉可能研究的是其他内容)。但是不管怎样,在这本书中,我们将继续使用“计算机视觉”这一术语,因为这是当今计算机科学领域中更受欢迎和广泛使用的术语;另外一个原因是,我们将在本章后面看到,图像处理是OpenCV库的一个模块,在本书中我们将用一章来介绍图像处理的知识。
目前,计算机视觉是计算机科学中最受欢迎的学科之一,被广泛应用于各个领域:从检测癌组织的医疗工具,到帮助制作精彩音乐视频和电影的视频编辑软件;从帮助在地图上定位一个特定位置的目标探测器,到帮助无人驾驶汽车寻找路线的交通信号探测器。很明显,我们不可能罗列出计算机视觉的所有应用场景,但可以肯定的是,在很长一段时间内,计算机视觉都将是一门有趣的学科。计算机视觉领域的职业需求正在快速增长,前景光明。
在计算机视觉开发人员和专家使用的最流行的工具中,有两个优秀的开源社区框架,你手中拿的这本书就是以它们的名字命名的——OpenCV和Qt。每天,世界各地成千上万的开发人员,从成熟的老牌公司到新兴的创业公司,都在使用这两个开发框架,为不同行业构建应用程序,你将要在本书中学习这些知识。
本章将介绍以下主题:
·开源以及跨平台的应用程序开发框架Qt的介绍
·开源以及跨平台的计算机视觉框架OpenCV的介绍
·如何在Windows、macOS和Linux操作系统上安装Qt
·如何在Windows、macOS和Linux操作系统上构建OpenCV
·配置开发环境,使用Qt和OpenCV框架的组合来构建应用程序
·使用Qt和OpenCV构建第一个应用程序
这是在读完本章引言之后遇到的一个最显而易见的问题,但是这个问题的答案也是我们学习计算机视觉之旅的第一步。本书是为那些熟悉C++编程语言的开发人员准备的,这些程序开发人员希望可以毫不费力地开发出在不同的操作系统上都运行良好的强大而漂亮的计算机视觉应用程序。本书的目的是让你在一个令人兴奋的学习之路上,通过不同的计算机视觉主题,专注于动手练习并一步一步地开发出你学到的所有内容。
任何有足够C++编程经验的开发人员都知道,如果要使用原始C++代码并依赖于OS特定的API来编写具有丰富视觉效果的应用程序,将不是一件容易的事情。所以,几乎每个C++开发人员(或者至少是那些有一定C++经验的开发人员)都使用一个或另一个框架来简化这个过程。最广为人知的C++框架就是Qt。实际上,这即使不是最好的选择,也是最好选择之一。另一方面,如果目标是开发一个图像处理或可视化数据集的应用程序,那么OpenCV框架可能是首选,并且可能是最流行的选择。这就是本书关注Qt和OpenCV组合的一个原因。如果不使用Qt和OpenCV等强大框架的组合,为不同桌面和移动平台开发高性能计算机视觉应用程序是不太可能实现的。
总之,在读本书之前,请一定保证你至少达到了C++编程语言知识的中级水平。如果对于类、抽象类、继承、模板或指针之类的术语还不熟悉的话,那么建议先读一本C++的书。对于其他所有主题,尤其是所有涉及实践的内容,这本书中包含的所有示例和教程都提供了清晰的解释(或具体的文档参考页面)。当然,要想非常详细而深入地掌握如何在Qt和OpenCV上实现模块和类,则需要熟悉更多的资源、研究成果,有时甚至是核心的数学计算,或者是对计算机或操作系统如何在现实世界中执行的底层理解,这完全超出了本书的范围。但是,我们将对本书所涵盖的所有算法和方法做一个简短的描述,说明这些算法和方法是什么,如何使用,以及在何时、何处使用,如果愿意继续深入研究的话,我们还将提供足够的指导。
读者可能已经听说过Qt,甚至可能不知不觉使用过Qt。Qt是许多世界闻名的商业和开源应用程序的基础,例如VLC Player、Calibre等等。大多数财富500强公司都在使用Qt框架,我们甚至无法知道在世界上许多应用程序开发团队和公司中,Qt框架是如何广泛使用和流行起来的。因此,我们就从一个介绍开始,然后一步一步深入。
首先,让我们从头开始简单地介绍一下Qt框架。目前,Qt框架是由Qt公司建立和管理的,它是一个广泛用于创建丰富视觉效果的开源的应用程序开发框架,并且很少或者根本就不需要任何修改就可以创建可在不同操作系统或设备上运行的跨平台应用程序。继续将Qt框架细分,开源是最显而易见的一部分,这就意味着可以访问Qt的所有源代码。对我们而言,所谓丰富的视觉效果,是指在Qt框架中有足够的资源和能力来编写非常漂亮的应用程序。至于最后一部分——跨平台,这基本上意味着,如果使用Qt框架的模块和类为微软Windows操作系统开发一个应用程序,那么在macOS或Linux上都可以像在Windows上一样编译和构建这个应用程序,而几乎不需要改变任何一行代码,前提是在应用程序中不使用任何非Qt的或特定平台的库。
在编写本书的时候,Qt框架(或者简称Qt)在5.9.×版本中包括许多通用的开发应用程序模块。Qt将这些模块划分为4个主要类别:
·Qt基本模块
·Qt扩展
·附加值模块
·技术预览模块
让我们来看看这些模块是什么以及包括了什么,我们将在整本书中涉及这些内容。