第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
DualTV-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