OpenCV 4.11.0
开源计算机视觉库
加载中…
搜索中…
无匹配项
使用 inRange 函数进行阈值操作

上一篇教程: 基础阈值操作
下一篇教程: 创建你自己的线性滤波器!

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

目标

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

  • 使用 OpenCV cv::inRange 函数执行基本的阈值操作。
  • 基于 HSV 颜色空间中像素值的范围检测物体。

理论

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

HSV 颜色空间

HSV(色相、饱和度、明度)颜色空间是一个类似于 RGB 颜色模型的色彩空间表示模型。由于色相通道模拟颜色类型,因此它在需要根据颜色分割物体的图像处理任务中非常有用。饱和度的变化是从不饱和到表示灰度,以及完全饱和(没有白色成分)。明度通道描述颜色的亮度或强度。下图显示了 HSV 圆柱体。

By SharkDderivative work: SharkD [CC BY-SA 3.0 or GFDL], via Wikimedia Commons

由于 RGB 颜色空间中的颜色使用三个通道编码,因此基于其颜色分割图像中的物体更加困难。

By SharkD [GFDL or CC BY-SA 4.0], from Wikimedia Commons

使用 cv::cvtColor 函数在不同的颜色空间之间转换的公式在 颜色转换 中描述。

代码

说明

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

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

  • 创建一个窗口来显示默认帧和阈值帧。

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

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

  • 显示图像

  • 对于控制下限范围的轨迹条,例如色调值

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

  • 需要找到最大值和最小值,以避免出现诸如阈值高值小于低值之类的差异。

结果

  • 编译此程序后运行它。程序将打开两个窗口
  • 设置轨迹条的范围值后,结果帧将显示在另一个窗口中。