如何在OpenCV中为InRange阈值选择最佳HSV值

时间:2014-10-31 09:13:55

标签: opencv image-processing threshold

我有两个相关的问题:

  1. 我在OpenCV中使用inRange阈值功能进行颜色对象检测。如果我手动选择较低和较高的HSV界限,我会得到很好的结果,但这对照明条件非常敏感。是否有算法可以确定给定目标和背景的HSV值的最佳阈值界限?

    例如,以下是我正在使用的值:

    目标HSV值:[15,37,51]

    背景HSV值:[90,21,211]

  2. inRange是简单的逐像素过滤器。它不会动态地改变阈值条件。是否有自适应阈值或Otsu阈值的颜色?或者可以利用目标和背景的先验HSV值的算法?

1 个答案:

答案 0 :(得分:2)

如果大部分图像或多或少相同(例如大多数是背景),则可以执行以下操作:

  1. 计算图像中像素值的中值(M)。有些人使用mean而不是中位数,因为它的稳健性。

  2. 计算图像中像素值的中值绝对偏差(MAD)。再次,我更喜欢它的标准偏差,因为它的稳健性。

  3. 所有落在(M-k * MAD)和(M + k * MAD)之间的范围将是背景(或对象)。选择常数' k'根据你的申请(我猜它会在1到5之间)。

    小小提示,如果这是您第一次使用MAD:正常分布情况下,1标准偏差约等于1.5 MAD。