首页 >后端开发 >Python教程 >如何使用 cv::inRange 有效确定物体检测的 HSV 颜色边界?

如何使用 cv::inRange 有效确定物体检测的 HSV 颜色边界?

Barbara Streisand
Barbara Streisand原创
2024-12-02 01:56:09539浏览

How to Effectively Determine HSV Color Boundaries for Object Detection using cv::inRange?

使用 cv::inRange (OpenCV) 选择对象检测的颜色边界

使用 cv::inRange 函数进行颜色检测时,选择适当的 HSV 上限和下限至关重要。本文解决了如何根据感兴趣的特定颜色有效地确定这些边界的问题。

背景

HSV(色相、饱和度、值)是一种颜色图像处理中常用的空间。 HSV 模型将颜色表示为三个组成部分:

  • 色调 (H):表示颜色深浅(例如红色、蓝色)。
  • 饱和度 (S):测量颜色的量阴影中存在的颜色 (0-1)。
  • 值 (V):代表颜色的亮度(0-255).

选择边界

根据检测到的特定颜色确定正确的 HSV 边界。以下是分步指南:

  1. 确定色调:

    • 使用颜色选择器工具识别以下颜色的 HSV 值感兴趣的对象。
    • 请注意,根据不同的情况,HSV 值可能会使用不同的比例
  2. 调整色调范围:

    • 通过调整识别值周围的范围来考虑色调的细微变化.
    • 例如,如果色调为 22(满分 179),则范围为(11-33) 可能是合适的。
  3. 设置饱和度和值范围:

    • 使用合理的范围饱和度(例如 50-255)。
    • 对于值,请选择一个范围其中包括对象的预期亮度。
  4. 考虑格式:

    • 确保 HSV 转换适合你的图像格式。
    • 例如,OpenCV 使用 BGR,而不是 RGB 图像

示例

让我们考虑一下检测图像中橙色盖子的示例。

  1. 单纯疱疹病毒值:

    • 使用颜色选择器,我们获得 HSV 值 (22, 59, 100)。
  2. 调整后边界:

    • 色调范围:(11-33)
    • 饱和度范围:(50-255)
    • 值范围: (50-255)
  3. Python 代码:

    import cv2
    import numpy as np
    
    ORANGE_MIN = np.array([11, 50, 50], np.uint8)
    ORANGE_MAX = np.array([33, 255, 255], np.uint8)
    
    # Read and convert image
    img = cv2.imread('image.png')
    hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
    
    # Detect orange using inRange
    mask = cv2.inRange(hsv_img, ORANGE_MIN, ORANGE_MAX)
    # Display mask
    cv2.imshow('Mask', mask)
    cv2.waitKey(0)

以上是如何使用 cv::inRange 有效确定物体检测的 HSV 颜色边界?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn