《OpenCV 实例精解》学习笔记

第1章 OpenCV的探险之旅

安装 OpenCV

第2章 OpenCV基础知识介绍

CMake

  1. 基本配置文件
  2. 创建库
  3. 管理依赖关系
  4. 脚本复杂化
  5. 图像和矩阵

    OpenCV用 Mat类来实现,访问像素:value = Row_i * num_cols * num_channels + Col_j * num_channels + Channel_k

  6. 读写图像

    imreadimwriteimshow

  7. 读取视频和摄像头

    VideoCapture、imshow、 namedWindow

  8. 其它基本对象类型

    VecPoint_、 ScalarPointSizeRectRotated RectMap

  9. 矩阵的基本运算

    与标量乘法:*

    每个元素乘法: .mul

    矩阵乘法:*

  10. 基本数据的持久性和存储

    FileStorage

第3章 图形用户界面和基本滤波

  1. OpenCV的用户界面

    基于本地用户界面的基本界面和基于QT库且略微高级的跨平台用户界面

  2. 使用OpenCV实现基本的用户界面

    namedWindowimshowresizeWindowmoveWindowdestroyWindowdestroyAllWindowsupdateWindow

  3. QT的图形用户界面

    三个主要区域:工具栏、图像区域、状态栏
    displayOverlay、displayStatusBar

  4. 在界面上添加滑动条和鼠标事件

    滑动条的回调函数、鼠标的回调函数、 createTrackBarsetMouseCallback

  5. 在用户界面上添加按钮(仅适用于QT窗口)

    QT_CHECKBOX、QT_RADIOBOX、QT_PUSH_BUTTON

    cvtColor:输入图像、输出图像、色彩空间转换类型

  6. 支持OpenGL

    OpenGL是一个以显卡为标准的图形库,允许绘制从二维到复杂三维的场景

第4章 深入研究直方图和滤波器

  1. 生成CMake脚本文件
  2. 创建图形用户界面

    CommandLineParser、imread、namedWindow、imshow、 waitKey

  3. 绘制直方图

    splitcalcHistnormalizelinecvRound

  4. 图像的色彩均衡化

    图像均衡化和直方图均衡化尝试获取一个值均匀分布的直方图

    cvColor、split、 equalizeHist、merge、imshow

  5. LOMO效果

    LUTcircleblur、Mat.convertTo、 multiply

  6. 卡通效果

    边缘检测和色彩滤波

    medianBlurCannygetStructuringElementdilatebilateralFilter

第5章 自动光学检测、目标分隔和检测

  1. 隔离场景中的目标

    预处理(去噪、去除光亮、二值化),分割(轮廓提取、连通分量提取)

  2. 创建AOI应用程序

  3. 输入图像的预处理

    1. 去除噪声
      中值滤波通常用于去除椒盐噪声
    2. 使用光纹删除背景来分割
    3. 阈值操作
      threshold
  4. 分割输入图像

    用于分割阈值图像的两种技术:连通区域、findContours函数

    1. 连通区域算法

      connectedComponentsconnectedComponentsWithStats、Mat::zeros、Mat.setTo、 putText

    2. findContours算法

      drawContours

第6章 学习目标分类

  1. 介绍机器学习的概念

    机器学习包含了模式识别和人工智能的学习理论,并且和计算机统计学相关

    根据机器学习算法如何从数据或样本中学习,可以将其分为:监督学习、无监督学习、强化学习等

    根据所需的结果,可以分为:分类算法、回归算法、聚类算法、密度估计算法

    OpenCV实现了8种机器学习算法,都集成自 StatModel类:

    1. 人工神经网络
    2. 提升算法(boosting)
    3. 随机树
    4. 最大期望
    5. K近邻
    6. logistic回归分析
    7. 一般的贝叶斯分类器
    8. 支持向量机

    StatModel是需要通过它的每个具体实现来实现的接口,它的两个关键函数是 trainpredict

  2. 计算机视觉和机器学习的工作流程

    预处理(去除光亮条件和噪声、阈值、模糊等)-分割-特征提取-机器学习分类-后期处理

  3. 自动检测目标分类的示例

    1. 预处理、分割图像
    2. 对图像中的每个物体提取特征、将带标签的物体添加到训练特征向量中
    3. 创建SVM模型
    4. 通过训练特征向量训练我们的SVM模型
    5. 对预处理输入图像进行分类
    6. 分割输入图像
    7. 对检测到的每个物体提取特征、预测SVM模型、在输出图像中绘制结果
  4. 特征提取

    Mat.clone、 RNG、Mat::zeros、findContours、drawContours、sum、 minAreaRect

    1. 训练 SVM模型

      预处理、特征提取、训练模型
      SVM::Create、SVM.setType、SVM.setKernel、SVM.setTermCriteria、SVM.train、SVM.predict、countNonZero

    2. 预测输入图像

      预处理、特征提取、预测、结果展示

第7章 识别人脸部分并覆盖面具

  1. 理解Haar级联

    Haar级联是一个基于Haar特征的级联分类器。级联分类器是一个把弱分类器串联成强分类器的过程。弱分类器是一个性能受限的分类器,它们无法正确地区分所有事物。强分类器可以正确地对数据进行分类。

    多重尺度法:把图像缩小再次计算同样的特征

    提取Haar特征,需要计算图像中封闭矩形区域的像素值总和。为了不改变比例,需要计算多重尺度区域

  2. 积分图

  3. 在实时视频中覆盖上面具

    resize、cvtColor、equalizeHist、threshold、bitwise_not、bitwise_and、add

  4. 戴上太阳镜

  5. 跟踪鼻子、嘴和耳朵

第8章 视频监控、背景建模和形态学操作

  1. 理解背景差分

    背景差分技术能很好地在一个静态场景中探测移动对象

    背景建模:尝试探测场景中的静态部分,然后更新背景模型。可以根据现场调整的自适应技术

    1. 简单背景差分法
    2. 帧差值法

      计算当前帧与前一帧、当前帧与下一帧之间的绝对差,然后取这些帧差值并使用按位与运算

    3. 混合高斯方法

      一种混合模型只是一个统计模型,可以用来表示数据中的子群的存在。用高斯函数表示每个子群,它就称为高斯混合

  2. 形态学操作

    形态学图像操作用于处理图像的形状特征。

    形态学运算使用结构元素来修改图像。结构元素总的来说是一个小的形状,它可以用来检查图像中的一个小区域

    1. 图像细化
    2. 图像加粗
    3. 其它形态学运算

      形态学开运算:先腐蚀后膨胀

      形态学毕运算:先膨胀后腐蚀

      绘制边界:形态学梯度

      白顶帽变换:计算输入图像和形态学开运算结果之间的差

      黑顶帽变换:计算输入图像和形态学闭运算结果之间的差

第9章 学习对象跟踪

  1. 跟踪特定颜色的对象

    (颜色信息对照明条件很敏感)

    HSV:色相、饱和度和色值

  2. 建立交互式对象跟踪器

    Meanshift算法:

    CAMShift算法:

    Meanshift问题是边界框的大小不允许改变。当对象远离镜头时,在人眼中对象会变小,但是Meanshift不会考虑这个现象。在整个跟踪会话中,边界框的大小将保持不变。

    CAMShift的有点是它可以根据对象边界框的大小来调整大小,除此之外,它还可以跟踪对象的移动方向。

    Mat.copyTo、cvtColor、resize、inRange、mixChannels、calcHist、normalize、calcBackProject、CamShift、ellipse、bitwise_not

  3. 使用Harris角点检测器检测点

    角点是指两个特征值将有较大值的一个点

    Mat::zeros、cvtColor、cornerHarries、normalize、convertScaleAbs

  4. Shi-Tomasi角点检测器

    goodFeaturesToTrack

  5. 基于特征的跟踪

    基于特征的跟踪是指在视频的连续帧中跟踪单个特征点

  6. Lucas-Kanade算法

    用于稀疏光流跟踪。稀疏指的是特征点数目相对较少

    calcOpticalFlowPyrLKcornerSubPix

  7. FarneBack算法

    用于密集光流跟踪。

    第一步:对两个帧中的每个邻域多项式逼近

    第二步:通过全局位移来构造一个新的信号

    第三步:用二次多项式收益率中的等值系数计算整体位移

    calcOpticalFlowFarneback

第10章 文本识别中的分割算法

  1. OCR简介
  2. 预处理步骤

    1. 图像阈值化:threshold
    2. 文本分割:使用连通分量分析,搜索图像组的连续像素;或使用分类器来搜索先前熟知的字母纹理图案

      对于方法1:

      1. 创建连通区域:膨胀形态学dilate
      2. 识别段落快:findContours
      3. 确定每个轮廓最小边界旋转矩形:minAreaRect
  3. 文本提取和倾斜调整:getRotationMatrix2D、warpAffine、getRectSubPix、copyMakeBorder

  4. 在你的操作系统上安装 Tesseract OCR

  5. 使用Tesseract OCR库

第11章 使用 Tesseract 识别文本

  1. 文本识别API工作原理

    1. 实时文字检测问题
    2. 极值区域

极值区域是通过均匀强度和环绕的对比度背景特征识别的连接区域

  1. 极值区域滤镜

  2. 使用文本识别API

    1. 文本检测
    2. 文本提取
    3. 文字识别

Reference

https://docs.opencv.org/3.0.0/index.html

站长需要在每个页面的HTML代码中包含以下自动推送JS代码:

发表评论

电子邮件地址不会被公开。