fbpx

[email protected]

购物车

 查看订单

  • 我的帐户
东东购 | EasternEast
  • 中文书店
    • 畅销排行榜
      • 小说 畅销榜
      • 童书 畅销榜
      • 外语畅销榜
      • 管理畅销榜
      • 法律畅销榜
      • 青春文学畅销榜
    • 热门分类
      • 社会小说
      • 成功/励志 畅销榜
      • 人物传记
      • 大陆原创
      • 绘本童书
      • 影视小说
    • 文学推荐
      • 文集
      • 戏剧
      • 纪实文学
      • 名家作品
      • 民间文学
      • 中国现当代随笔
    • 新书热卖榜
      • 小说 新书热卖榜
      • 青春文学 新书热卖榜
      • 童书 新书热卖榜
      • 管理 新书热卖榜
      • 成功/励志 新书热卖榜
      • 艺术 新书热卖榜
  • 精选分类
    • 小说
    • 保健养生
    • 烹饪/美食
    • 风水/占卜
    • 青春文学
    • 童书
    • 管理
    • 成功/励志
    • 文学
    • 哲学/宗教
    • 传记
    • 投资理财
    • 亲子家教
    • 动漫/幽默
    • 法律 Legal
    • 经济 Economics
    • 所有分类
  • 关于东东
  • 帮我找书
搜索
首页畅销榜计算机/网络 畅销榜学习OpenCV 3(中文版)

学习OpenCV 3(中文版)

由OpenCV发起人所写,站在一线开发人员的角度用通俗易懂的语言解释OpenCV的缘起和计算机视觉基础结构,演示了如何用OpenCV和现有的自由代码为各种各样的机器进行编程,带你深入探索计算机视觉领域

作者:[美]Adrian Kaehler Gary Bradski 著  阿丘科技 刘昌祥 吴雨培 王成龙 崔玉芳 等译 出版社:清华大学出版社 出版时间:2018年07月 

年中特卖用“SALE15”折扣卷全场书籍85折!可与三本88折,六本78折的优惠叠加计算!全球包邮!
trust badge

EUR €83.99

类别: 程序设计, 计算机/网络 畅销榜 SKU:5c239b86421aa985877a574e 库存: 有现货
  • 描述
  • 评论( 0 )

描述

产品特色
编辑推荐

OpenCV库包含500多个函数,2500多种算法,可以扩展应用到视觉行业中的很多领域,有广泛的用途,比如安保,医学成像,模式与人脸识别,机器人和工业产品检测,等等。《学习OpenCV 3(中文版)》实用性强,内容全面,讲解透彻,可以帮助读者掌握如何构建具有一定AI(人工智能)的应用程序,使计算机能够“看见”并根据所得到的数据来做出决策。《学习OpenCV 3(中文版)》全面介绍整个OpenCV库,所有示例代码都用C 实现,同时还介绍了可以用于计算机视觉的机器学习工具。《学习OpenCV 3(中文版)》每一章都精心设计有动手练习,旨在方便课堂教学和自学,进一步帮助读者学以致用。

通过学习《学习OpenCV 3(中文版)》,读者可以奠定扎实的基础,运用计算机视觉相关知识和OpenCV库来构建简单的或者精巧复杂的应用程序。

 

内容简介

计算机视觉是在图像处理的基础上发展起来的新兴学科。OpenCV是一个开源的计算机视觉库,是英特尔公司资助的两大图像处理利器之一。它为图像处理、模式识别、三维重建、物体跟踪、机器学习和线性代数提供了各种各样的算法。

《学习OpenCV 3(中文版)》由OpenCV发起人所写,站在一线开发人员的角度用通俗易懂的语言解释了OpenCV的缘起和计算机视觉基础结构,演示了如何用OpenCV和现有的自由代码为各种各样的机器进行编程,这些都有助于读者迅速入门并渐入佳境,兴趣盎然地深入探索计算机视觉领域。

《学习OpenCV 3(中文版)》可作为信息处理、计算机、机器人、人工智能、遥感图像处理、认知神经科学等有关专业的高年级学生或研究生的教学用书,也可供相关领域的研究工作者参考。

作者简介

作者简介

安德里安•凯勒(Adrian Kaehler)博士,企业家,硅谷深度学习小组创始人。他的工作重心包括机器学习、统计建模、计算机视觉和机器人。他就职于斯坦福大学人工智能实验室,他还是该校斯坦利团队的成员,该团队在美国国家航空与航天局(NASA)主办的机器人挑战赛中胜出,赢得了200万美元的大奖。

加里•布拉德斯基(Gary Bradski)博士是Arraiy.ai的首席架构师(CTO),他曾经就职于好几个创业公司,担任过斯坦福大学计算机系人工智能实验室的顾问教授。他是OpenCV库的创始人,是一名享有广泛声誉的演讲人、开源社区的积极参与者。

译者团队介绍

阿丘科技

阿丘科技是一家以机器学习、3D 视觉和机器人技术为核心的高科技企业,拥有业内领先的机器人3D 视觉技术、机器学习算法及标准行业解决方案。

人工智能,已经成为全球技术发展、应用拓展的前沿领域,也是引领未来的一枚关键的棋子。计算机视觉作为人工智能的关键应用点之一,近年来兴起的创业公司主要集中在人脸识别、无人驾驶、增强现实等领域。而阿丘科技独辟蹊径,将人工智能技术与机器人结合,将其应用于工业自动化领域,并在短短一年内在多个场景下落地,取得了出色的成果。

相较于传统的机器视觉,阿丘科技将深度学习用于工业视觉检测,在缺陷检测分类等场景下具有突出优势。而三维计算机视觉与机器人的结合,更是极大地扩展了工业机器人的应用场景。凭借国际顶尖的技术人才,领先的计算机视觉、机器人技术,阿丘科技走在了智能工业视觉技术的前列。随着人工智能和智能制造行业的兴起,我司将助力中国工业自动化以及智能化的发展。

尽管由于某些原因,OpenCV并没有在正式版本中提供自身完备的深度学习工具(我们很高兴这一点在3.3 版本中有了巨大改善),但是OpenCV作为从事机器视觉应用技术开发的必备工具,同样,也是阿丘科技技术开发的基础工具之一,有着不可替代的作用。在很多固定场景下,基于OpenCV等视觉工具的开发的算法依然具有极大的应用潜力。尤其是对于初学者而言,我们还是非常推荐使用OpenCV完成一些视觉项目,而不是直接用深度学习构建空中楼阁。我司能够在一年内推出经受复杂应用场景检验、市场普遍认可的产品,有一大份功劳,也归属于OpenCV对项目完成和开发研究的推动。高效、精准、便捷等诸多特质,使得OpenCV在学术研究和商业应用中占据了重要地位。

阿丘科技致力于构建领先的智能机器人视觉平台,以视觉为切入点,将 AI 与机器人结合。创始团队源自清华大学计算机系人工智能实验室,聚集了来自清华、CMU 等全球高等院校的顶尖人才,以及工业机器人和自动化资深行业从业者。我们期待,能有更多热爱视觉、工业自动化和机器人技术的朋友加入阿丘科技,共同去探索和扩展机器人应用的边界!

目  录

目录

译者序       xvii

前言         xxi

第1章
概述     
1

什么是OpenCV        1

OpenCV怎么用        2

什么是计算机视觉     3

OpenCV的起源        6

OpenCV的结构    7

使用IPP来加速OpenCV     8

谁拥有OpenCV    9

下载和安装OpenCV    9

安装             9

从Git获取最新的OpenCV      12

更多的OpenCV文档   13

提供的文档      13

在线文档和维基资源     13

OpenCV贡献库       15

下载和编译Contributed模块         16

可移植性           16

小结  17

练习  17

第2章 OpenCV初探            19

头文件    19

资源           20

第一个程序:显示图片       21

第二个程序:视频    23

跳转  24

简单的变换          28

不那么简单的变换    30

从摄像头中读取      32

写入AVI文件        33

小结  34

练习  35

第3章
了解OpenCV的数据类型    37

基础知识           37

OpenCV的数据类型   37

基础类型概述    38

深入了解基础类型       39

辅助对象        46

工具函数        53

模板结构        60

小结  61

练习  61

第4章
图像和大型数组类型      
63

动态可变的存储      63

cv::Mat类N维稠密数组         64

创建一个数组    65

独立获取数组元素       69

数组迭代器NAryMatIterator         72

通过块访问数组元素     74

矩阵表达式:代数和cv::Mat         75

饱和转换        77

数组还可以做很多事情    78

稀疏数据类cv::SparesMat  79

访问稀疏数组中的元素    79

稀疏数组中的特有函数    82

为大型数组准备的模板结构         83

小结  85

练习  86

第5章
矩阵操作  87

矩阵还可以做更多事情       87

cv::abs()        90

cv::add()        91

cv::addWeighted()        92

cv::bitwise_and()  94

cv::bitwise_not() 94

cv::bitwise_or()   94

cv::bitwise_xor()  95

cv::calcCovarMatrix()     95

cv::cartToPolar()  97

cv::checkRange()  97

cv::compare()    98

cv::completeSymm()      99

cv::convertScaleAbs()     99

cv::countNonZero()      100

cv::Mat cv::cvarrToMat() 100

cv::dct()        101

cv::dft()        102

cv::cvtColor()   103

cv::determinant()        106

cv::divide()     106

cv::eigen()      106

cv::exp()       107

cv::extractImageCOI()    107

cv::flip()       108

cv::gemm()     108

cv::getConvertElem()和cv::getConvertScaleElem()    
109

cv::idct()       110

cv::inRange()    110

cv::insertImageCOI()      111

cv::invert()      111

cv::log()        112

cv::LUT()      112

cv::Mahalanobis()       113

cv::max()       114

cv::mean()      115

cv::meanStdDev()       116

cv::merge()     116

cv::min()       116

cv::minMaxIdx()       117

cv::minMaxLoc()        118

cv::mixChannels()       119

cv::mulSpectrums()      120

cv::multiply()   121

cv::mulTransposed()     121

cv::norm()      122

cv::normalize()  123

cv::perspectiveTransform()          125

cv::phase()      125

cv::polarToCart()        126

cv::pow()       126

cv::randu()      127

cv::randn()      127

cv::repeat()     129

cv::scaleAdd()   129

cv::setIdentity()  130

cv::solve()      130

cv::solveCubic()        131

cv::solvePoly()  132

cv::sort()       132

cv::sortIdx()     133

cv::split()       133

cv::sqrt()       134

cv::subtract()    135

cv::sum()       135

cv::trace()      135

cv::transform()   136

cv::transpose()   136

小结 137

练习 137

第6章
绘图和注释             139

绘图 139

艺术线条和填充多边形   140

字体和文字     146

小结 148

练习 148

第7章 OpenCV中的函数子      151

操作对象          151

主成分分析(cv::PCA)  151

奇异值分解cv::SVD     154

随机数发生器cv::RNG   157

小结 160

练习 160

第8章
图像、视频与数据文件   
163

HighGUI模块:一个可移植的图形工具包 163

图像文件的处理     164

图像的载入与保存      165

关于codecs的一些注释   167

图片的编码与解码      168

视频的处理         169

使用cv::VideoCapture对象读取视频流    169

使用cv::VideoWriter对象写入视频   175

数据存储          176

cv::FileStorage的写入    177

使用cv::FileStorage读取文件        179

cv::FileNode    180

小结 183

练习 183

第9章
跨平台和Windows系统    187

基于Windows开发   187

HighGUI原生图形用户接口         188

通过Qt后端工作        199

综合OpenCV和全功能GUI工具包    209

小结 222

练习 222

第10章
滤波与卷积            225

概览 225

预备知识          225

滤波、核和卷积        225

边界外推和边界处理    227

阈值化操作         230

Otsu算法       233

自适应阈值     233

平滑 235

简单模糊和方框型滤波器          236

中值滤波器     238

高斯滤波器     239

双边滤波器     240

导数和梯度         242

索贝尔导数     242

Scharr滤波器    244

拉普拉斯变换   245

图像形态学         246

膨胀和腐蚀     247

通用形态学函数        250

开操作和闭操作        251

形态学梯度     254

顶帽和黑帽     256

自定义核       258

用任意线性滤波器做卷积    259

用cv::filter2D()进行卷积  259

通过cv::sepFilter2D使用可分核      260

生成卷积核     260

小结 262

练习 262

第11章
常见的图像变换       
267

概览 267

拉伸、收缩、扭曲和旋转    267

均匀调整       268

图像金字塔     269

不均匀映射     273

仿射变换       274

透视变换       279

通用变换          282

极坐标映射     282

LogPolar       283

任意映射       287

图像修复          287

图像修复       288

去噪          289

直方图均衡化       292

cv::equalizeHist()用于对比均衡      294

小结 295

练习 295

第12章
图像分析   
297

概览 297

离散傅里叶变换     297

cv::dft()离散傅里叶变换  298

cv::idft()用于离散傅里叶逆变换     300

cv::mulSpectrums()频谱乘法        300

使用傅里叶变换进行卷积          301

cv::dct()离散余弦变换   303

cv::idct()离散余弦逆变换           304

积分图   304

cv::integral()标准求和积分         306

cv::integral()平方求和积分         306

cv::integral()倾斜求和积分         307

Canny边缘检测     307

cv::Canny()     309

Hough变换         309

Hough线变换   309

Hough圆变换   313

距离变换          316

cv::distanceTransform()无标记距离变换   317

cv::distanceTransform()有标记距离变换   317

分割 318

漫水填充       318

分水岭算法     322

Grabcuts算法    323

Mean-Shift分割算法    325

小结 326

练习 326

第13章
直方图和模板         
329

OpenCV中直方图的表示     331

cv::calcHist():从数据创建直方图   332

基本直方图操作     334

直方图归一化   334

直方图二值化   335

找出最显著的区间      335

比较两个直方图        337

直方图用法示例        339

一些复杂的直方图方法      342

EMD距离      342

反向投影       347

模板匹配          350

方差匹配方法(cv::TM_SQDIFF)   351

归一化方差匹配方法(cv::TM_SQDIFF_NORMED)        352

相关性匹配方法(cv::TM_CCORR) 352

归一化的互相关匹配方法(cv::TM_CCORR_NORMED)     352

相关系数匹配方法(cv::TM_CCOEFF)            352

归一化的相关系数匹配方法(cv::TM_CCOEFF_NORMED)  352

小结 355

练习 355

第14章
轮廓   359

轮廓查找          359

轮廓层次       360

绘制轮廓       364

轮廓实例       365

另一个轮廓实例        366

快速连通区域分析      368

深入分析轮廓       370

多边形逼近     370

几何及特性概括        372

几何学测试     377

匹配轮廓与图像     378

矩   378

再论矩         380

使用Hu矩进行匹配      383

利用形状场景方法比较轮廓        384

小结 388

练习 389

第15章
背景提取   
391

背景提取概述       391

背景提取的缺点     392

场景建模          392

像素          393

帧间差分       396

平均背景法         397

累计均值,方差和协方差          403

更复杂的背景提取方法      410

结构          413

进行背景学习   414

存在移动的前景物体时进行背景学习 417

背景差分:检测前景物体          418

使用码书法的背景模型   419

关于码书法的其他想法   419

使用连通分量进行前景清理   420

小测试         423

两种背景方法的对比        425

OpenCV中的背景提取方法的封装       425

cv::BackgroundSubstractor基类      426

KB方法        427

Zivkovic方法    428

小结 431

练习 431

第16章
关键点和描述子       
433

关键点和跟踪基础   433

角点检测       434

光流简介       437

Lucas-Kanade稀疏光流法          438

广义关键点和描述符        448

光流,跟踪和识别      450

OpenCV一般如何处理关键点和描述符   451

核心关键点检测方法    461

关键点过滤     497

匹配方法       499

结果显示       505

小结 508

练习 508

第17章
跟踪   511

跟踪中的概念       511

稠密光流          512

Farneback多项式扩展算法          513

Dual TV-L1模型  515

简单光流算法   519

Mean-Shift算法和Camshift 追踪         522

Mean-Shift算法  522

Camshift       526

运动模板          526

估计 533

卡尔曼滤波器   534

扩展卡尔曼滤波器简述   549

小结 551

练习 551

第18章
相机模型与标定       
553

相机模型          554

射影几何基础   556

Rodrigues变换   558

透镜畸变       559

标定 562

旋转矩阵和平移向量    563

标定板         566

单应性         572

相机标定       576

矫正 587

矫正映射       587

使用cv::convertMaps()在不同表示方式之间转换矫正映射     588

使用cv::initUndistortRectifyMap()计算矫正映射      589

使用cv::remap()矫正图像           591

使用cv::undistort()进行矫正        591

使用cv::undistortPoints()进行稀疏矫正
   591

与标定结合         592

小结 595

练习 596

第19章
投影与三维视觉       
599

投影 600

仿射变换与透视变换        601

鸟瞰图变换实例        602

三维姿态估计       606

单摄像机姿态估计      607

立体成像          609

三角测量       610

对极几何       613

本征矩阵和基本矩阵    615

计算极线       624

立体校正       624

立体校正       628

立体匹配       638

立体校正、标定和对应的示例代码   650

来自三维重投影的深度映射        657

来自运动的结构     659

二维与三维直线拟合        659

小结 662

练习 662

第20章
机器学习基础         
665

什么是机器学习     665

训练集和测试集        666

有监督学习和无监督学习          667

生成式模型和判别式模型          669

OpenCV机器学习算法   669

机器学习在视觉中的应用          671

变量的重要性   673

诊断机器学习中的问题   674

ML库中遗留的机器学习算法  678

K均值         679

马氏距离       684

小结 687

练习 687

第21章 StatModel:OpenCV中的基准学习模型       689

ML库中的常见例程  689

训练方法和cv::ml::TrainData的结构  691

预测          697

使用cv::StatModel的机器学习算法       698

朴素贝叶斯分类器      699

二叉决策树     703

Boosting方法    716

随机森林       721

期望最大化算法        725

K近邻算法       729

多层感知机     731

支持向量机     739

小结 749

练习 750

第22章
目标检测   
753

基于树的目标检测技术      753

级联分类器     754

有监督学习和boosting理论         756

学习新目标     764

使用支持向量机的目标识别   772

Latent SVM用于目标识别          772

Bag of Words算法与语义分类       775

小结 780

练习 780

第23章 OpenCV的未来         783

过去与未来         783

OpenCV 3.x     784

我们上一次预测怎么样?    784

未来应用          785

目前GSoC的进展       787

社区贡献       788

OpenCV.org     789

一些关于AI的猜测   790

结语 793

附录A 平面划分     795

附录B opencv_contrib模块概述         809

附录C 标定图案     813

参考文献      819

前  言

前言

这本书提供了C 开源计算机视觉库(OpenCV)3.0版本的工作指南,介绍了计算机视觉相关领域的通用背景,以便读者更有效地使用OpenCV。

本书的目标

计算机视觉在以下四个趋势的引导下,已经成为一个快速发展的领域:

•
智能手机的出现让数以百万计的用户都拥有了相机

•
互联网和搜索引擎聚集了海量的图像和视频数据

•
计算资源变成一种廉价的商品

•
视觉算法发展得更加成熟(由于深度神经网络的出现,OpenCV也正在逐渐支持这方面技术,详情可以参考opencv_contrib中的dnn)

OpenCV通过帮助成千上万的视觉工作者去做更多富有创造性的工作,在图像处理领域扮演着重要的角色。由于OpenCV 3.x的存在,不管你是学生还是研究人员,是专家还是初学者,都可以快速建立应用,并且在OpenCV所提供的基于C 的多平台视觉基础架构上实现一个跨越性的发展。

本书的目标如下:

•
通过详细讲述函数的惯用用法以及正确用法,成为一本更好的OpenCV经典参考文档

•
帮助读者对各种计算机视觉算法的工作原理有一个基础的理解

•
培养读者,使其知道什么算法工具可以使用并且应该在什么时候使用

•
提供给读者许多有效的代码,提升其应用计算机视觉和机器学习算法的开发效率

•
针对问题代码给读者提供建议,教读者如何解决一些简单或复杂的问题

本书的写作方式是力求帮助读者快速在计算机视觉领域做一些有意思的事情,因此直观地解释了算法是如何工作的,可以指导读者设计和调试计算机视觉程序,还能够使计算机视觉和机器学习算法的形式化描述更容易理解和记忆。

本书受众

本书包含描述、工作代码示例和OpenCV 3.x库中包含的C 计算机视觉工具说明。因此,本书对各种不同类型的用户都有所帮助。

专业人士和开发者

对于需要快速设计原型或实现专业计算机视觉系统的专家而言,示例代码提供的框架可以帮助他们在此基础上进行快速开发。我们对算法的描述可以快速教会或者提醒读者如何使用它们。由于OpenCV 3.x的设计基于位于硬件加速层(HAL)之上,所以它所实现的算法都可以高效运行,并且能够无缝应用各种硬件平台的诸多加速特性。

学生

这是我们希望能广泛应用于学校的教程。直观的解释、详细的文档以及示例代码将能够帮助你在计算机视觉之路上更快地前进,做更有趣的项目,最终为这个领域开拓新的研究方向。

教师

计算机视觉是一个快速发展的领域。我们发现,让学生快速浏览容易读的文章并且教师在必要的地方进行说明,再辅之以现阶段的论文或讲座,是一种非常高效的授课方法。与此同时,学生可以提前开始课程设计,并尝试做一些更有挑战性的任务。

爱好者

计算机视觉超有趣的,让我们一起深入探索它吧。

我们致力于为读者提供丰富的指导、文档以及代码来快速建立实时的视觉应用。

本书不是什么

这本书不是正式的论文,我们的确在很多地方讨论了数学上的细节注1,但这都是为了建立一种基于此的更深层次的直觉以及阐明算法中所构建的假设之含义。在这里,我们没有尝试进行一些更加正式的数学解释,因为过多的数学解释可能会使一些人觉得枯燥。

这本书本质上来说更偏向于“应用”,它将作为一个基础的帮助,但是并不着力于介绍某个具体的计算机视觉领域分类(比如医学图像或者遥感图像分析)。

也就是说,我们相信通过阅读这里的解释,学生不仅能更好地学习理论,而且还能记住更多、更久。因此,这本书将是一个很好的理论课程的辅助教材,并且很适合入门课程或以项目为中心的课程使用。

本书例程

本书所有例程都基于OpenCV 3.x。这些代码在Linux,Windows 以及 OS X都可以运行。OpenCV也有充足的对安卓和IOS 的支持。本书所有代码都可以在本书网站(http://bit.ly/learningOpenCV3)获取,OpenCV的源码可以在GitHub(https://github.com/opencv/opencv)获取,OpenCV的预编译版本可以在SourceFroge(https://sourceforge.net/projects/opencvlibrary/)获取。

Op e nCV现在也处于开发过程中,每个季度都有新的官方版本发布。如果希望得到最新版本,可以从前述的GitHub网站得到代码更新。OpenCV的官方网站是http://opencv.org,如果是开发人员,还可以浏览它的维基页面:https://github.com/opencv/opencv/wiki。

预备知识

在大多数情况下,读者只需要了解如何使用C 编程。本书许多数学相关的段落都不是必须的并且也做出了相应的标记。本书需要的数学基础包括简单的线性代数以及基础矩阵运算,并且假设读者了解最小二乘优化、高斯分布的基础知识、贝叶斯法则以及一些简单方程的衍生和变化。

本书对数学的介绍是为了支持建立一种对算法的直觉。读者可以跳过数学部分以及算法描述部分,只阅读函数解释以及代码示例,也可以构建视觉应用并且使其正常工作。

如何使用本书

本书并不一定要按照章节顺序阅读,它可以作为一本用户手册:需要的时候,可以用来查询函数,如果你希望了解它的工作原理,请阅读该函数相关的描述。本书的意图在于提供一本指南。它提供对计算机视觉的基本理解以及如何在何时使用选择的算法。

本书的写作目的是作为计算机视觉的本科或研究生课程的辅助教材或教科书。采取的基本策略是先让学生能够快速阅读课本,然后在其他教科书或者文章中用更正式的章节进行补充阅读。每一章最后都配有练习题,可以帮助测试学生对知识的掌握程度并培养更多图像处理方面的意识。

可以采用如下任意一种方法来阅读本书。

抓取重点

先阅读第1~5章,之后只阅读你所需要的章节。除了第18章和第19章(涵盖了相机校正和双目视觉)以及第20章~第22章(涵盖机器学习),这本书并不需要按照章节顺序阅读。以项目为导向的学生和研发人员可以用这种方式阅读。

精读

坚持每周阅读两章,这样你就可以在11周之内读完第1章~第22章(第23章很短)。从项目开始,深入到具体研究领域,适当地使用额外的文献和论文作为补充。

速成

在可以理解的基础上尽可能快地浏览本书,阅读第1章~第23章,之后开始项目,并使用相关文献和论文在某一个领域进行更深入的研究。这也许是专业人员的一个选择,但也可能适合更高级的计算机视觉课程。

第20章对机器学习进行了简要的介绍,在此之后的第21章和第22章将对机器学习算法及其在OpenCV中的实现和实战进行更详细的解释。当然,机器学习是目标识别以及计算机视觉的重要组成部分,相关知识非常丰富以至于可以独立成书。专业人员会发现这本书是进一步探索的一个合适的起点,或者也可以仅仅对这一部分的OpenCV代码进行深入研究。在OpenCV 3.x中,机器学习的接口已经大大简化和统一。

我们喜欢的计算机视觉教学方式是,在学生基本能够理解算法工作原理的基础上尽可能快速展开教学,然后让他们进一步加深理解,进而开始学习有意义的课程设计,同时通过相关领域的文献和论文让学生对所选择的领域拥有更深刻和系统的认识。这种方法适用于半学期、一学期以及两学期的课程。学生可以快速开始,在对视觉项目仅仅有一般认识的时候就开始编码,等到进行更富挑战性和更耗时的工作的时候,指导教师可以提供适当的帮助。

而对于计划时间更长的课程来说,OpenCV项目本身就可以成为项目管理的指导。先建立工作系统,然后用更多的知识、细节和研究进一步加以完善。这类课程的目的是让每个项目都有一个值得自己发表的地方并且其中一些真的能够发展壮大起来。

3.x的代码框架,Buildbots、GitHub的使用,pull
request,单元测试和回归测试,文档,这些对商业软件架构来说都是很好的示例,值得参考。

本书约定

本书中使用下列约定。

斜体(Italic)

指示新的术语、URL、电子邮件地址、文件名、拓展名、路径名、文件夹和Unix工具。

固定宽度(Constant Width)

指示指令、选项、选择、变量、属性、键、函数、类型、类、命名空间、方法、模块、参数、值、对象、时间、事件句柄、XML标记、HTML标记、文件的内容或者指令的输出。

加粗固定宽度(Constant width bold)

指示指令以及其他应该由用户输入的文本。也用来着重显示代码片段。

斜体固定宽度(Constant Width Italic)

指示应当由用户提供的值取代的文本。

[…]

指示参考目录的引用。

这个标识表示建议或者一般性的笔记。

这个标识表示警告或需要注意的地方。

使用代码例程

补充材料(代码例程和练习等)都可以在https://github.com/oreillymedia/Learning-OpenCV-3_examples下载。

OpenCV不管是对于商业还是学术使用都是免费的,本书的代码我们也使用了相同的许可。不管是作为作业、研究还是商业产品,都可以使用。我们会非常感谢你在自己的文章中引用这本书,不过这不是必须的。引用通常包含标题、作者、出版商以及ISBN。

比如:“Learning OpenCV 3 by Adrian Kaehler and Gary Bradski (O’Reilly)。Copyright
2017 Adrian Kaehler, Gary Bradski, 978-1-491-93799-0。”

除了了解如何帮助你完成你的作业(最好保密),我们很乐意听到你将计算机视觉用于学术研究或者课堂教学以及使用OpenCV来帮助你开发商业产品。同样,这不是必须的,我们始终欢迎你们的来信。

O’Reilly Safari

Safari是企业、政府、教育工作者和个人的会员制培训平台。该平台的成员可以获取上千种图书、培训视频、学习路线、交互教程以及来自超过250个出版商的播放列表,包括O’Reilly Media,Harvard Business Review,Prentice Hall
Professional,Addison-Wesley Professional,Microsoft Press,Sams,Que,Peachpit
Press,Adobe,Focal Press,Cisco Press,John Wiley & Sons,Syngress,Morgan Kaufmann,IBM Redbooks,Packt,Adobe Press,FT Press,Apress,Manning,New Riders,McGraw-Hill,Jones & Bartlett,Course Technology以及其他一些出版商。

更多信息请访问http://oreilly.com/safari。

联系方式

请把你对本书的意见和疑问发给出版社:

美国:

O’Reilly Media, Inc.

1005 Gravenstein Highway North

Sebastopol, CA 95472

中国:

北京市西城区西直门南大街2号成铭大厦C座807室(100035)

奥莱利技术咨询(北京)有限公司

我们还有一个服务于本书的网站。那里有示例的列表以及未来版本的计划。点击http://bit.ly/learningOpenCV3了解这些信息。

评论或是询问这本书技术相关的问题,请发送邮件到[email protected]。

关于本书、课程、会议以及新闻更多信息,请访问我们的网站:http://www.oreilly.com在FaceBook上找到我们:http://facebook.com/oreilly在Twitter上关注我们:http://twitter.com/oreillymedia

在YouTube上观看我们:http://www.youtube.com/oreillymedia

免费在线读

第一个程序:显示图片

OpenCV提供了一些实用工具来读取从视频流到摄像机画面的各种各样的图像格式,这些工具都是HighGUI的一部分。我们将使用其中的一些工具来创建一个简单的程序,这个程序将打开一张图像并且将其显示在屏幕上(如示例2-1所示)。

示例2-1:一个简单的加载并显示图像的OpenCV程序

#include
//Include file for every supported OpenCV function

int main( int argc, char** argv ) {

cv::Mat img = cv::imread(argv[1],-1);

if( img.empty() ) return -1;

cv::namedWindow( “Example1”,
cv::WINDOW_AUTOSIZE );

cv::imshow( “Example1”, img );

cv::waitKey( 0 );

cv::destroyWindow( “Example1” );

return 0;

}

注意,OpenCV的函数都位于cv这一命名空间下,为了调用OpenCV的函数,你需要在每个函数前加上c v::,向编译器说明你所调用的函数处于c v命名空间。为了摆脱这种繁琐的工作,我们可以像示例2-2一样用using namespace cv;指令,告诉编译器假设所有函数都位于c v命名空间下。注1你还需要注意示例2-1和示例2-2在头文件上的不同,在前者中,我们使用了通用的opencv.hpp,而在后者中,我们只使用了必须的头文件来节约编译时间。

示例2-2:与示例2-1不同的是直接使用了using namespace

#include
“opencv2/highgui/highgui.hpp”

using namespace cv;

int main( int argc, char** argv ) {

Mat img = imread( argv[1], -1 );

if( img.empty() ) return -1;

注1:
当然,如果这样做,需要冒着和其他潜在的命名空间冲突的风险。如果函数f o o()已经存在于c v和s t d的命名空间,你必须指定自己使用的是位于c v::f o o()的函数还是位于std::foo()的函数。在本书中,除了示例2-2,都会指明cv::命名空间,并以此保持一个良好的编程风格。

namedWindow( “Example1”,
cv::WINDOW_AUTOSIZE );

imshow( “Example1”, img );

waitKey( 0 );

destroyWindow( “Example1” );

}

当使用命令行编译和运行时,注2示例2-1将加载一张图像到内存中并且显示到屏幕上。它会保持显示直到用户按下一个键,之后程序才会销毁窗口并退出。现在让我们来一行一行地解释代码,并花一些时间来理解每一行代码都在做什么工作。

cv::Mat img = cv::imread( argv[1], -1 );

这一行将会载入图像。注3函数cv::imread()是高级的;依据文件名来决定载入图像格式的处理。这也会自动地申请图像需要的内存,注意,cv::imread()可以读取很多种图像格式,包括BMP,DIP,JPEG,JPE,PNG,PBM,PGM,PPM,SR,RAS以及TIFF。

函数会返回一个c v::M a t结构,这个结构是Op e nCV中你将会接触最多的自带结构。OpenCV使用这个结构来处理所有类型的图像:单通道、多通道、整型、浮点数以及各种类型。紧接着的下面这一行:

if( img.empty() ) return -1;

检查这个图像是否真的被载入了。另一个高层级的函数cv::namedWindow()将会在屏幕打开一个窗口,其中可以包含需要显示的图片。

cv::namedWindow( “Example1”,
cv::WINDOW_AUTOSIZE );

该函数由HighGUI模块提供,会将一个名称赋予窗口(在这里窗口名为”Example1″)。未来HighGUI的和这个窗口的交互函数将由这个名称来指定要与哪个窗口交互。

c v::n a m e d W i n d o w第二个参数说明了Windows的特性。这可以全部设置为0(默认情况下),也可以设置为cv::WINDOW_AUTOSIZE。在之前的例子中,窗口的大小将会和载入图像的大小一致,图像将会被缩放以适应窗口的大小。在之后的例子中,窗口将会在图像载入的时候被自动缩放以适应图像的真实大小,也可能由用户自行调整。

注2:
当然,如果这样做的话,你需要冒着和其他潜在的命名空间冲突的风险。如果函数f o o()已经存在于c v和s t d的命名空间,必须指定你使用的是位于c v::f o o()的函数还是位于std::foo()的函数。在本书中,除了示例2-2,都会指明cv::命名空间,并以此保持一个良好的编程风格。

注3:
好的程序会检查argv[1]是否存在并且给用户反馈一个错误信息,但是在这里没有。我们在本书中将会简略掉这些处理并且假设读者都有足够的的知识来理解处理错误代码的方式及其重要性。

cv::imshow( “Example1”, img );

不论何时,只要在c v::M a t中拥有一个图像结构,我们都可以通过c v::i m s h o w()进行显示。c v::i m s h o w()将建一个窗口(如果这个窗口不存在,它会自动调用c v::n a m e d W i n d o w()新建一个窗口)。在调用c v::i m s
h o w()的时候,窗口将被重绘上要求的图片,并且窗口会按照要求自动调整大小(如果使用c v::W I N D O W_A U T O S I Z E参数)。

cv::waitKey(0);

c v::w a i t K e y(0);函数告诉系统暂停并且等待键盘事件。如果其传入了一个大于零的参数,它将会等待等同于该参数的毫秒时间,然后继续执行程序。如果参数被设置为0或者一个负数,程序将会无限等待直到有键被按下。

因为有c v::M a t,图像将会在生命周期结束的时候自动释放,其行为类似于标准模板库(STL)中的容器类。这种自动的内存释放由内部的引用指针所控制,最重要的是,这表示我们用不着担心图像的内存申请和释放,这将程序员从OpenCV 1.0 IplImage结构繁琐的维护工作中解放了出来。

cv::destroyWindow( “Example1” );

最后,我们可以让窗口自行销毁。函数cv::destroyWindow()将会关闭窗口并且释放掉相关联的内存空间。为了更简洁的编码,我们将会在之后的例子中略过这一步。在更长、更复杂的代码中,程序员应该在窗口的生命周期自然结束之前自主销毁窗口以防止内存泄漏。

我们下一个任务是创建一个非常简单的、几乎和本例一样的程序来读取视频文件。在此之后,我们将会开始对实际图像进行更多的操作。

书摘插画
插图

插图

插图

插图

插图

插图

抢先评论了 “学习OpenCV 3(中文版)” 取消回复

评论

还没有评论。

相关产品

阅读更多
缺货

数据结构——C++版(第四版)(英文影印版)

EUR €63.99
加入购物车

深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)

EUR €40.99
评分 5.00 / 5
加入购物车

Python编程(第四版)

EUR €105.99
评分 5.00 / 5
加入购物车

PHP编程 第三版(影印版)

EUR €42.99

东东购的宗旨是服务喜爱阅读中文书籍的海外人民,提供一个完善的购书平台,让国人不论何时何地都能沉浸在书香之中,读着熟悉的中文字,回忆着家乡的味道。


安全加密结账 安心网络购物 支持Paypal付款

常见问题

  • 货物配送
  • 退换货政策
  • 隐私政策
  • 联盟营销

客户服务

  • 联系东东
  • 关于东东
  • 帮我找书
  • 货物追踪
  • 会员登入

订阅最新的优惠讯息和书籍资讯

选择币别

EUR
USD
CAD
AUD
NZD
NOK
GBP
CHF
SEK
CNY
UAH
ILS
SAR
MXN
KRW
MYR
SGD
HUF
TRY
JPY
HKD
TWD
facebookinstagram
©2020 东东购 EasternEast.com

限时特卖:用“SALE15”优惠券全场书籍85折!可与三本88折,六本78折的优惠叠加计算。 忽略