【问题标题】:Wrong HSV conversion from RGBRGB 的 HSV 转换错误
【发布时间】:2018-10-31 03:42:58
【问题描述】:

我有这些列表包含 RGB 格式的蓝色值。

low = [
    [0, 0, 128],
    [65, 105, 225],
    [70, 130, 180],
    [72, 61, 139],
    [83, 104, 120]
]

我想做的是:将所有值从例如第一个列表从 RGB 转换为 HSV。

我编写了这段代码:

import cv2
import numpy as np

for v in low:
    rgb = np.uint8([[v]])
    print("RGB: ", rgb)

    hsv = cv2.cvtColor(rgb, cv2.COLOR_RGB2HSV)
    print("HSV: ", hsv)
    print("\n")

问题是当我去检查颜色(RGB-HSV)是否相同时。在这里我发现不是。

让我们从low 列表中取出最后一个值。

RGB:  [[[ 83 104 120]]]
HSV:  [[[103  79 120]]]

RGB 是 RGB 输入值,HSV 是输出。但这最后一个颜色与 RGB 不同。首先是蓝色阴影,最后是绿色。为什么?

我使用this tool 来检查值。它还说这个 RGB 的正确 HSV 应该是205, 30, 47

我的错误在哪里?

【问题讨论】:

  • 获得答案的机会与所提供代码的质量有关。见minimal verifyable complete example。 - 我们不需要 500 种颜色来查看行为。另外:您缺少进口商品(例如 cv2)?请编辑并缩小您的代码,谢谢。
  • Found this...希望能有所帮助
  • 您用于验证的工具的色调范围为 [0,359],饱和度和数值范围为 [0,100]。 OpenCV 的 HSV 范围是 [0,179] 的色调,[0,255] 的饱和度和值。

标签: python opencv rgb


【解决方案1】:

您用于验证的工具的色调范围为 [0,359],饱和度和值的范围为 [0,100]。 OpenCV 的 HSV 范围是 [0,179] 的色调,[0,255] 的饱和度和值。

乘以 2、1/2.55、1/2.55,您将得到预期值,但会出现较小的整数截断错误:[103 79 120] * [2 1/2.55 1/2.55] = [206 31 47]

【讨论】:

    【解决方案2】:

    虽然@FBergo 的回答是正确的,但我想补充一点,这些转换(乘以...)是type-dependent,在使用8UC3 的转换时必须小心, 16SC332SC332FC3 等等。

    【讨论】:

      猜你喜欢
      • 2016-04-14
      • 1970-01-01
      • 2011-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-14
      相关资源
      最近更新 更多