Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在OpenCV中为InRange阈值选择最佳HSV值_Opencv_Image Processing_Threshold - Fatal编程技术网

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

如何在OpenCV中为InRange阈值选择最佳HSV值,opencv,image-processing,threshold,Opencv,Image Processing,Threshold,我有两个相关的问题: 我正在OpenCV中使用inRangethreshold函数进行彩色对象检测。如果我手动选择HSV下限和上限,我会得到非常好的结果,但这对光照条件非常敏感。是否有一种算法可以根据目标和背景的HSV值确定最佳阈值范围 例如,以下是我正在使用的值: 目标HSV值:[15,37,51] 背景HSV值:[90,21,211] inRange是一种简单的逐像素过滤器。它不会动态更改阈值条件。是否有自适应阈值或大津阈值的颜色等价物?还是一种可以利用目标和背景的先验HSV值的算法 如果图

我有两个相关的问题:

  • 我正在OpenCV中使用
    inRange
    threshold函数进行彩色对象检测。如果我手动选择HSV下限和上限,我会得到非常好的结果,但这对光照条件非常敏感。是否有一种算法可以根据目标和背景的HSV值确定最佳阈值范围

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

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

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

  • inRange
    是一种简单的逐像素过滤器。它不会动态更改阈值条件。是否有自适应阈值或大津阈值的颜色等价物?还是一种可以利用目标和背景的先验HSV值的算法


  • 如果图像的大部分大致相同(例如,大部分是背景),则可以执行以下操作:

  • 计算图像中像素值的中值(M)。有些人用均值代替,但我更喜欢中位数,因为它的稳健性

  • 计算图像中像素值的中值绝对偏差(MAD)。由于它的稳健性,我还是更喜欢它而不是标准差

  • 介于(M-k*MAD)和(M+k*MAD)之间的所有对象都将成为背景(或对象)。根据您的应用选择常数“k”的值(我猜它将在1到5之间)


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

    您可以尝试在V通道上运行otsu阈值,然后使用返回值获得V的范围
    (M-k*MAD)
    您是想将
    k*MAD
    分离到
    (m-k)*MAD
    ?从我的经验来看,这很容易产生负数,而不是正数(因此下限几乎总是达到0)。@DouglasGaskell,不,这不是k*MAD。如果下限为0,没有什么不好的,只要它对当前的灰度分布有意义(通常是这样)。