OpenCV 4.12.0
开源计算机视觉
加载中...
搜索中...
无匹配项
使用 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("Low H", window_detection_name, low_H);
    }
  • 对于控制上限范围的滑动条,例如色相值

  • 有必要找到最大值和最小值,以避免阈值高值小于低值等差异。

结果

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