代码之家  ›  专栏  ›  技术社区  ›  lucians

来自RGB的HSV转换错误

  •  1
  • lucians  · 技术社区  · 8 年前

    我有这些列表,其中包含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 .

    我的错误在哪里?

    2 回复  |  直到 8 年前
        1
  •  6
  •   FBergo    8 年前

    用于验证的工具的色调范围为[0359],饱和度和值范围为[0100]。opencv的hsv范围是色调的[0179],饱和度和值的[0255]。

    乘以2,1/2.55,1/2.55,您将得到期望值,减去小整数截断错误:[103 79 120]*[2 1/2.55 1/2.55]=[206 31 47]

        2
  •  2
  •   Rick M.    8 年前

    虽然@fbergo的答案是正确的,但我想补充一下这些转换( 乘以… 是 type-dependent 使用转换时必须小心 8UC3 , 16SC3 , 32SC3 , 32FC3 等等。