OpenCV  4.10.0
开源计算机视觉
正在加载...
正在搜索...
无匹配项
inRange 中使用的阈值操作

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

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

目的

在本教程中,您将了解如何

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

理论

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

HSV 颜色空间

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

SharkDderivative 作品:SharkD [知识共享署名-相同方式共享 3.0 或 GFDL],来自维基共享资源

由于 RGB 颜色空间中的颜色是由三个通道编码的,因此很难基于颜色对图像中的物体进行分割。

SharkD [GFDL 或知识共享署名-相同方式共享 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);
    }
  • 对于控制较高范围的轨迹栏,例如色相值

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

结果

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