OpenCV 4.13.0
开源计算机视觉库 (Open Source Computer Vision)
正在加载...
正在搜索...
未找到匹配项
使用 inRange 进行阈值化操作

上一个教程: 基本阈值化操作
下一个教程: 制作你自己的线性滤镜!

原作者Lorena García
兼容性Rishiraj Surti

目标

在本教程中,你将学习如何:

  • 使用 OpenCV cv::inRange 函数执行基本阈值化操作。
  • 根据 HSV 颜色空间中像素值的范围检测对象。

理论

  • 在前面的教程中,我们学习了如何使用 cv::threshold 函数进行阈值化。
  • 在本教程中,我们将学习如何使用 cv::inRange 函数进行此操作。
  • 概念保持不变,但现在我们添加了所需像素值的范围。

HSV 颜色空间

HSV(色相、饱和度、值)颜色空间是一种类似于 RGB 颜色模型表示颜色空间的模型。由于色相通道对颜色类型进行建模,因此它在需要根据颜色分割对象的图像处理任务中非常有用。饱和度的变化范围从不饱和到表示灰色阴影和完全饱和(无白色分量)。值通道描述了颜色的亮度或强度。下图显示了 HSV 圆柱体。

由 SharkD 衍生作品: SharkD [CC BY-SA 3.0 或 GFDL],通过维基共享资源

由于 RGB 颜色空间中的颜色使用三个通道进行编码,因此在图像中根据颜色分割对象更困难。

由 SharkD [GFDL 或 CC BY-SA 4.0],来自维基共享资源

使用 cv::cvtColor 函数从一个颜色空间转换为另一个颜色空间的公式在 颜色转换 中描述

代码

解释

让我们检查程序的总体结构

  • 从默认或提供的捕获设备捕获视频流。

  • 创建窗口以显示默认帧和阈值帧。

  • 创建轨迹条以设置 HSV 值的范围

  • 直到用户希望程序退出,执行以下操作

  • 显示图像

  • 对于控制下限范围(例如色相值)的轨迹条

    static void on_low_H_thresh_trackbar(int, void *)
    {
    low_H = min(high_H-1, low_H);
    setTrackbarPos("低 H", window_detection_name, low_H);
    }
  • 对于控制上限范围(例如色相值)的轨迹条

  • 有必要找到最大值和最小值,以避免出现诸如阈值的高值小于低值之类的不一致情况。

结果

  • 编译此程序后,运行它。程序将打开两个窗口
  • 当您从轨迹条设置范围值时,结果帧将在另一个窗口中可见。