产品特色
编辑推荐
涵盖OpenCV2、OpenCV3双版本的核心编程技巧
附赠OpenCV2、OpenCV3双版本总计200余个配套示例程序源代码
内容简介
OpenCV在计算机视觉领域扮演着重要的角色。作为一个基于开源发行的跨平台计算机视觉库,OpenCV实现了图像处理和计算机视觉方面的很多通用算法。《OpenCV3编程入门》以当前全新版本的OpenCV常用核心的组件模块为索引,深入浅出地介绍了OpenCV2和OpenCV3中的强大功能、性能,以及新特性。书本配套的OpenCV2和OpenCV3双版本的示例代码包中,含有总计两百多个详细注释的程序源代码与思路说明。读者可以按图索骥,按技术方向进行快速上手和深入学习。
《OpenCV3编程入门》要求读者具有基础的C/C++知识,适合研究计算机视觉以及相关领域的在校学生和老师、初次接触OpenCV但有一定C/C++编程基础的研究人员,以及已有过OpenCV 1.0编程经验,想快速了解并上手OpenCV2、OpenCV3编程的计算机视觉领域的专业人员。《OpenCV3编程入门》也适合于图像处理、计算机视觉领域的业余爱好者、开源项目爱好者做为通向新版OpenCV的参考手册之用。
《OpenCV3编程入门》配套的【示例程序】、【.exe可执行文件】、【书内彩图】的下载链接可通过扫描《OpenCV3编程入门》封底或后勒口的二维码获取。
作者简介
毛星云,90后,网络ID“浅墨”。微软VC++领域颇具价值专家(MVP),中国2013年度十大杰出JT博客作者,南京航空航天大学2014年度十大杰出青年。CSDN博客专家,2013年度CSDN博客之星,于CSDN写博数年,博客浏览量已逾252万人次。本科毕业于乌克兰国立航空航天大学以及南京航空航天大学,硕士就读于南京航空航天大学。已出版著作《逐梦旅程:Windows游戏编程之从零开始》,个人事迹曾多次被人民网、新华网、凤凰网、网易新闻、新浪新闻、金陵晚报、现代快报等主流媒体报道。
精彩书评
★很好,文章透彻,程序易懂,一看就会,能够快速掌握。
——枫羽落雪
★对于新版OpenCV能有这么透彻的讲解,真是太好了。
——yuhangrcnmin
★文笔不错,而且对编程的理解很到位,向你学习。再次感谢。
——vacuum8899
★很感谢你,看了你写的教程让我少走了很多弯路!
——nicepaiflkillcr
★您写的真透彻!解决很多的疑问和麻烦!感动!
——cy_543
★写的很好,深入浅出,给的程序也很实用,佩服。
——xuliangfirst
★代码写的通俗易懂,对于新手来说真是很有帮助!真心感谢楼主的无私奉献!
——Alex
目录
第一部分 快速上手openCV
第1章 邂逅OpenCV
1.1 openCV周边概念认知
1.1.1 图像处理、计算机视觉与OpenCV
1.1.2 openCV概述
1.1.3 起源及发展
1.1.4 应用概述
1.2 openCV基本架构分析
1.3 openCV3带来了什么
1.3.1 项目架构的改变
1.3.2 将OpenCV2代码升级到OpenCV3报错时的一些策略
1.4 openCV的下载、安装与配置
1.4.1 预准备:下载和安装集成开发环境
1.4.2 第一步:下载和安装OpenCV SDK
1.4.3 第二步:配置环境变量
1.4.4 第三步:工程包含(include)目录的配置
1.4.5 第四步:工程库(1ib)目录的配置
1.4.6 第五步:链接库的配置
1.4.7 第六步:在Windows文件夹下加入openCV动态链接库
1.4.8 第七步:最终测试
1.4.9 可能遇到的问题和解决方案
1.5 快速上手openCV图像处理
1.5.1 第一个程序:图像显示
1.5.2 第二个程序:图像腐蚀
1.5.3 第三个程序:图像模糊
1.5.4 第四个程序:canny边缘检测
1.6 openCV视频操作基础
1.6.1 读取并播放视频
1.6.2 调用摄像头采集图像
1.7 本章小结
第2章 启程前的认知准备
2.1 openCV官方例程引导与赏析
2.1.1 彩色目标跟踪:Camshifi
2.1.2 光流:optical flow
2.1.3 点追踪:lkdemo
2.1.4 人脸识别:objectDetection
2.1.5 支持向量机引导
2.2 开源的魅力:编译openCV源代码
2.2.1 下载安装CMake
2.2.2 使用CMake生成openCV源代码工程的解决方案
2.2.3 编译openCV源代码
2.3 “opencv.hpp”头文件认知
2.4 命名规范约定
2.5 argc与argv参数解惑
2.5.1 初识main函数中的argc和argv
2.5.2 argc、argv的具体含义
2.5.3 Visual Studio中main函数的几种写法说明
2.5.4 总结
2.6 格式输出函数printfo简析
2.6.1 格式输出:printfo函数
2.6.2 示例程序:printf函数的用法示例
2.7 智能显示当前使用的OpenCV版本
2.8 本章小结
第3章 HighGUl图形用户界面初步
3.1 图像的载入、显示和输出到文件
3.1.1 openCV的命名空间
3.1.2 Mat类简析
3.1.3 图像的载入与显示概述
3.1.4 图像的载入:imreado函数
3.1.5 图像的显示:imshowo函数
3.1.6 关于InputArray类型
3.1.7 创建窗口:namedWindowo函数
3.1.8 输出图像到文件:imwriteo函数
3.1.9 综合示例程序:图像的载入、显示与输出
3.2 滑动条的创建和使用
3.2.1 创建滑动条:createTrackbaro函数
3.2.2 获取当前轨迹条的位置:getTrackbarPoso数
3.3 鼠标操作
3.4 本章小结
……
第二部分 初探core组件
第三部分 掌握imgproc组件
第四部分 深入feature2d组件
附录
主要参考文献
前言/序言
计算机视觉是一个近几年来日臻成熟的领域。随着运算性能强劲而又价格实惠的计算设备的不断问世,创建复杂的图像应用从未像今天这般容易。OpenCV在计算机视觉领域扮演着重要的角色,它是一个基于开源发行的跨平台计算机视觉库,实现了图像处理和计算机视觉方面的很多通用算法。自1999年问世以来,OpenCV已经被计算机视觉领域的学者和开发者视为首选工具,并成为了计算机视觉领域最有力的研究工具之一。
OpenCV最初由Intel的一个小组进行开发。在一系列的beta版本后,OpenCV1.0正式版本终于在2006年10月19日发布。2009年10月1日,OpenCV2.0问世,它带来了全新的C++接口,将OpenCV的能力无限放大。在2.0的时代,OpenCV增加了全新的平台支持,包括iOS和Andriod,通过CUDA和OpenCL实现了GPU加速,为Python和Java用户提供了接口,基于Github和Buildbot构建了充满艺术感的持续集成的系统,所以才有
了被全世界的很多公司和学校所采用的稳定易用的OpenCV2.4.x。2014年8月21日,OpenCV3.0Alpha发布,它带来了全新的项目架构的改变,宣告了计算机视觉新时代的来临。和其他大型项目一样,OpenCV3抛弃了整体统一架构,使用内核+插件的架构形式,让自身主体更加稳定,而附加的库则可以更加灵活多变,以保持高速的发展与迭代。
本书源自于笔者在CSDN上连载的名为“OpenCV入门教程”的系列博客文章,自2014年2月24日发表第一篇以来,得到了广大OpenCV爱好者的广泛关注与支持,累计阅读量突破了40多万人次。不少读者强烈希望将这些内容集结成书,并加入更多新的内容。于是,经过笔者半年的笔耕不辍,便有了现在这本书的诞生。
作为一本入门级的OpenCV编程教材,本书以详细注释的程序代码为主线,以新版OpenCV最核心的core、HighGUI、improc和feature2d这4个组件的相关函数、类和数据结构为出发点,详细讲解了学习新版本OpenCV中会遇到了各种问题,并提供了详尽的实战代码作为参考。本书的写作初衷是让更多的使用者能熟练使用采用新版C++接口的OpenCV2或OpenCV3,了解OpenCV2和OpenCV3的诸多细节上的区别,以推动新版OpenCV在世界范围内的普及。
本书的内容安排
本书分为4个部分、11个章节,现将内容梗概列举如下。
第1章邂逅OpenCV:介绍OpenCV的周边概念,分析OpenCV的基本架构,讲解OpenCV3的新特性。本章重点讲解了OpenCV的下载、安装与配置过程;在配置完成后,带领大家正式领略OpenCV的魅力,讲解了4个OpenCV图像处理小程序,并指导大家学习如何使用OpenCV操作视频和调用摄像头。
第2章启程前的认知准备:进行OpenCV官方例程的引导学习与赏析,讲解如何编译OpenCV的源代码,并引入了对一些周边概念的认知。
第3章HighGUI图形用户界面初步:对图像的载入、显示和输出到文件进行详细地分析,讲解OpenCV中滑动条的创建和使用,以及如何用鼠标进行交互操作。
第4章OpenCV数据结构与基本绘图:讲解OpenCV中常用的数据结构以及基本的绘图操作。
第5章core组件进阶:讲解core模块的一些进阶知识点,如操作图像中的像素、图像混合、分离颜色通道、调节图像的对比度和亮度、进行离散傅里叶变换,以及输入输出XML和YAML文件。
第6章图像处理:学习各种利用OpenCV进行图像处理的方法,包括属于线性滤波的方框滤波、均值滤波与高斯滤波,属于非线性滤波的中值滤波、双边滤波;两种基本形态学操作——膨胀与腐蚀;5种高级形态学滤波操作——开运算、闭运算、形态学梯度、顶帽以及黑帽;此外,还有漫水填充算法、图像金字塔、图像缩放、阈值化。
第7章图像变换:讲解多种类型的图像变换方法。包括利用OpenCV进行边缘检测所用到的canny算子、sobel算子,Laplace算子以及scharr滤波器;进行图像特征提取的霍夫线变换、霍夫圆变换,重映射和仿射变换以及直方图均衡化。
第8章图像轮廓与图像分割修复:讲解如何查找轮廓并绘制轮廓,如何寻找物体的凸包,使用多边形来包围轮廓,以及计算一个图像的矩。此外还介绍了分水岭算法和图像修补操作的实现方法。
第9章直方图与匹配:讲解图像直方图相关的编程技巧,以及直方图对比、
反向投影和模板匹配技术。
第10章角点检测:讲解Harris角点检测和Shi-Tomasi角点检测,以及一种亚像素角点检测方法。
第11章特征检测与匹配:使用OpenCV2讲解并实现了SURF、SIFT和ORB特征检测方法,并在FLANN特征匹配的基础上,进一步实现了利用Homography映射来找出已知物体。
适合阅读本书的读者
􀁹研究计算机视觉以及相关领域的在校学生和老师
本书拥有详实的内容,注释详尽的代码,会是助你通过OpenCV来研习计算机视觉理论、撰写论文、通过毕业设计、完成科研项目的得力工具。同时,本书适合作为大学计算机视觉课程的教学用书。
􀁹初次接触OpenCV、有一定C/C++编程基础的研究人员
作为一本定位为快速入门新版OpenCV标准的编程教程,本书需要的仅仅是一些简单的C/C++编程语言基础。如果你已经具备了这些基础,并对计算机视觉感兴趣,那么本书正是为你所准备的。
􀁹已经有过OpenCV1.0编程经验,想快速了解并上手OpenCV2、OpenCV3编程的计算机视觉领域的专业人员如果你曾经使用过OpenCV1.0,或者研读过OpenCV1.0时代的经典著作
《LearningOpenCV》,本书会让你倍感亲切。你会发现新版OpenCV带了更多强大和便利的特性,让你事半功倍,如虎添翼。
􀁹想拥有一本新版OpenCV接口工具书的计算机视觉爱好者本书中将自OpenCV2以来(包括OpenCV3)的常用类和函数进行了详细地讲解,并在附录中提供了“书本核心函数清单”以便检索。你会在书中快速查找到你需要用到的函数、数据结构和类的用法。
􀁹想拥有海量的详细注释的OpenCV2、OpenCV3示例程序代码的OpenCV爱
好者
本书包含OpenCV2版的95个书本主线示例程序源代码、21个附赠示例程序源代码,OpenCV3版的95个书本主线示例程序源代码。OpenCV2、OpenCV3两版代码提供分开下载。这些程序代码都经过详细而有条理的注释,并提供可以独立运行的.exe文件供快速查看程序效果,方便查看和检索。你会在海量的示例程序中找到你需要的参考代码,从而加速你的研究和学习。
􀁹图像处理、计算机视觉领域的业余爱好者
海阔凭鱼跃,天高任鸟飞,计算机视觉领域的宝库任你探索。
􀁹开源项目爱好者
OpenCV作为一个完全免费并开源代码开发的计算机视觉代码库,有总计上百万行的源代码供你研究学习,本书将是引导你学习它们的良师益友。
本书的示例程序说明
本书的示例程序最初都在OpenCV2.4.9(2014年4月15日面世)版本下开发,书稿初版也是基于OpenCV2.4.9而写。在书稿写作和修订过程中,恰逢OpenCV3.0Alpha(2014年8月21日)和OpenCV3Beta(2014年11月11日)的发布,所以本书在审校和修订过程中(2014年12月1日),决定站在浪潮之巅,以OpenCV2为主,加入OpenCV3的诸多特性,让这本书可以同时胜任OpenCV2和OpenCV3两个版本教材的角色。这也是为什么本书会有OpenCV2和OpenCV3两个独立版本的示例程序的原因。两个版本、详细注释的100多个示例程序源代码是本书的灵魂,现将示例程序的相关情况概括如下。
􀁹本书包含OpenCV2版的95个书本主线示例程序源代码、21个附赠示例程
序源代码,以及OpenCV3版的95个书本主线示例程序源代码。
􀁹OpenCV2、OpenCV3两版代码提供分开下载。
􀁹OpenCV2版的示例程序在Windows764位旗舰版、VisualStuido2010、OpenCV2.4.9的环境下开发与测试,理论上支持OpenCV2系列的所有版本的编译运行。
􀁹OpenCV3版的示例程序在Windows764位旗舰版、VisualStuido2010、OpenCV3.0beta的环境下开发与测试,理论上支持目前已经发布的OpenCV3全版本。
􀁹程序源代码都经过详细而有条理的注释。
􀁹额外提供可以独立运行的.exe文件供快速查看程序效果,并方便检索。
本书配套示例代码的下载方式有以下几种。
􀁹扫描本书封面后勒口的二维码,得到下载地址。
􀁹在作者博客中单击相应的书本维护博文里贴出的下载链接。
􀁹在电子工业出版社的官方网站中进行下载。
􀁹直接用搜索引擎搜索“《OpenCV3编程入门》书本配套源代码”,找到对应
的下载地址进行下载。
致谢
首先
现代计算机视觉的基石:深度解析图像处理与机器学习的融合之道 在数字化浪潮席卷全球的今天,图像作为信息传递最直观、最丰富的方式,其处理与分析能力已成为衡量一个国家科技实力的重要标志。从智能手机中的人脸识别,到自动驾驶汽车的“眼睛”,再到医疗影像的精准诊断,计算机视觉技术正以前所未有的速度渗透到我们生活的方方面面,深刻地改变着世界。而要掌握这一前沿领域,理解其核心技术,并将其应用于实际问题,一本能够系统阐述图像处理原理,并深入探讨机器学习与计算机视觉交叉领域的著作,显得尤为重要。 本书,并非是简单罗列一堆函数和API的使用说明,也不是枯燥乏味的理论堆砌。它旨在为读者构建一个坚实的理论基础,并辅以大量的实践指导,带领大家一步步深入到现代计算机视觉的核心。我们将从最基础的图像概念出发,逐步剖析图像在计算机内部是如何表示的,光照、颜色、像素点之间又存在着怎样的数学关系。读者将了解到,一张看似简单的照片,在计算机看来,是一串串数字的集合,而这些数字的变化,直接影响着我们最终看到的图像效果。 接着,本书将着力于介绍一系列经典的图像处理算法。这些算法如同构建摩天大楼的基石,是理解更复杂计算机视觉任务的前提。我们将详细讲解各种滤波器的原理与应用,包括高斯模糊、均值滤波、拉普拉斯算子等,理解它们如何在去除噪声、锐化图像、检测边缘等方面发挥关键作用。读者将不仅仅是学会调用这些函数,更会深入理解它们背后的数学模型,明白为何某种滤波器能够达到预期的效果。边缘检测,作为图像分析的重要步骤,我们将探讨Canny、Sobel、Prewitt等经典算法,分析它们在提取图像轮廓信息时的优劣。形态学处理,如腐蚀、膨胀、开运算、闭运算,也将得到详细讲解,它们在二值图像的分析与处理中扮演着不可或缺的角色,能够有效地连接断裂的轮廓,去除小的噪点,或者填充小的空洞。 然而,仅仅掌握传统的图像处理技术,已经难以满足日益增长的复杂视觉任务需求。人工智能的飞速发展,特别是深度学习技术的崛起,为计算机视觉带来了革命性的突破。本书的一个重要篇章,将聚焦于机器学习与计算机视觉的深度融合。我们将从机器学习的基本概念讲起,例如监督学习、无监督学习、回归、分类等,帮助读者建立起初步的机器学习认知。随后,我们将重点介绍与图像处理紧密相关的特征提取方法,包括SIFT、SURF、HOG等传统特征描述符,并分析它们在目标检测、图像匹配等任务中的应用。 更重要的是,本书将花费大量篇幅深入讲解深度学习在计算机视觉领域的强大威力。我们将详细介绍卷积神经网络(CNN)这一在图像识别领域取得巨大成功的模型,从其基本结构——卷积层、池化层、全连接层,到不同类型的CNN架构,如LeNet、AlexNet、VGG、ResNet、Inception等,逐一剖析其设计理念和工作原理。读者将了解卷积操作如何有效地提取图像的空间层级特征,池化操作如何实现特征的降维和鲁棒性增强,以及全连接层如何进行最终的分类或回归。 本书的亮点之一,在于将理论知识与实际应用紧密结合。我们将引导读者利用主流的深度学习框架,如TensorFlow或PyTorch,亲手构建和训练自己的CNN模型。从数据预处理、模型搭建、损失函数选择,到反向传播算法的实现,再到模型评估与优化,每一个环节都将提供清晰的步骤和详尽的代码示例。读者将有机会亲手实现人脸识别、物体检测、图像分割、风格迁移等经典计算机视觉任务,从而将理论知识转化为解决实际问题的能力。 除了深度学习在图像识别领域的应用,本书还将探讨其在其他计算机视觉任务中的重要作用。例如,在目标检测方面,我们将介绍Faster R-CNN、YOLO、SSD等先进的目标检测算法,分析它们如何实现对图像中多个目标的定位与识别。在图像分割方面,我们将介绍全卷积网络(FCN)、U-Net等模型,理解它们如何实现像素级别的分类,实现对图像中不同区域的精确分割。同时,我们还将触及图像生成、图像风格转换等更具创造性的计算机视觉应用,让读者领略到深度学习的无限可能。 本书的内容安排,力求循序渐进,由浅入深。对于初学者,可以从基础的图像处理章节开始,打下坚实的基础。对于有一定图像处理基础的读者,则可以直接跳到机器学习与深度学习部分,快速掌握前沿技术。书中每一个算法的讲解,都配以直观的图示和数学推导,力求让读者不仅知其然,更知其所以然。大量的代码示例,均经过精心设计和测试,方便读者复制、运行和修改,从而更好地理解和掌握相关知识。 本书的目标读者群体广泛,包括但不限于: 计算机科学、软件工程、电子信息工程等相关专业的学生: 为学生提供系统深入的计算机视觉知识体系,为后续学习和研究打下坚实基础。 对计算机视觉技术感兴趣的在职工程师: 帮助工程师快速掌握图像处理与机器学习的核心技术,提升在人工智能、图像识别、机器视觉等领域的专业能力。 希望将计算机视觉技术应用于实际项目的开发者: 提供丰富的实践经验和可执行的代码示例,助力读者将所学知识转化为实际应用。 对人工智能和图像分析领域充满好奇的研究者: 为研究者提供前沿的理论介绍和技术趋势分析,激发新的研究思路。 总而言之,本书将是一场探索现代计算机视觉奥秘的精彩旅程。它不仅会教会你如何“看懂”图像,更会让你学会如何“理解”图像,并赋予计算机“看懂”世界的能力。在这个日益智能化的时代,掌握计算机视觉技术,就是掌握了开启未来之门的钥匙。本书将是你踏上这段精彩旅程的理想向导,帮助你在这个充满机遇的领域中,走得更远,看得更清。