python - 修正 cv2.inRange() 函数的色彩空间

关于以下 cv2.inRange(...) 调用:

mask = cv2.inRange(quantized_img, color, color)

'quantized_img' 和 'color' 参数必须严格采用 HSV 格式,还是可以使用 RGB 图像和 RGB“颜色”? RGB 似乎对我有用,但我能找到的所有示例都是基于 HSV 的。所以我很关心正确的用法。 谢谢!

最佳答案

一般来说,使用您喜欢的任何颜色空间。 RGB/BGR 很好,HSV 很好,完全组成的东西(使用 cv.transform)也很好。

inRange 跨越一个“立方体”。

想一想。想象一个带有 R、G、B 轴或 H、S、V 轴的 3D 图。在 RGB 空间中,立方体的面与这些 RGB 轴对齐。在 HSV 空间中,立方体的面与那些轴对齐。

现在,跨越 RGB 空间的立方体在转换到 HSV 空间时,与 HSV 空间中的轴对齐。事实上,它甚至不再是立方体,而可能是某种圆环体或圆锥体的一部分或其他东西。反过来也是一样。

如果您感兴趣的值区域,无论您选择什么空间,都是平坦甚至棒状(而不是大部分球形云),您必须跨越的立方体可能与您感兴趣的值区域对齐得非常糟糕,并且必须包含许多您感兴趣的值。

因此您进入另一个颜色空间,您感兴趣的值与该空间中的轴稍微对齐。那么由 inRange 跨越的立方体更符合您的目的。

想象一下 RGB 空间中的一根“棍子”从黑角到白角。它表示没有饱和度的“颜色”(因为颜色位于立方体的其他六个角)。尝试在该区域上跨越一个立方体。不太合身。

然而,在 HSV 空间中,这是微不足道的。通常它被可视化为一个圆柱体/倒锥体,虽然......在中心跨越一个薄圆柱体:任何色调(角度),任何值(高度),具有非常低的饱和度(靠近中心轴)。如果您将 HSV 视为一个立方体,您将跨越一堵薄墙。这一切都非常合适。

https://stackoverflow.com/questions/69004124/

相关文章:

c - 如何在障碍处正确同步线程

r - 根据R中的条件定义元素

html - 如何更改复选框、 slider 、单选按钮和选择组件的强调色

python - 如何将值合并到 discord.py 中的一条消息中

javascript - 使用 Typescript 接口(interface) - 错误 : pr

r - 有没有办法计算 R 中多个数据帧中每个单元格的标准差?

javascript - 使用键映射和过滤对象数组

python - 如果函数返回 Python 中的模块,要使用什么返回类型注释?

r - 如何排除 R 中计算均值和标准差的月份

python - 为什么 `myfloat in myset` 变得 super 慢?