【问题标题】:RGB to HSV wrong in colorsys?colorsys中的RGB到HSV错误?
【发布时间】:2017-03-11 14:12:39
【问题描述】:

我正在使用 Python 的 colorsys 库:

import colorsys
colorsys.rgb_to_hsv(64, 208, 61)

output:(0.16666666666666666, 0, 208)

但是这个输出是错误的,这是使用 RGB 到 HSV 在线转换器的真实值: RGB to HSV

发生了什么事?

【问题讨论】:

    标签: python rgb hsv


    【解决方案1】:

    colorsys 的值在01 的范围内:

    所有这些色彩空间中的坐标都是浮点值。在 YIQ 空间中,Y 坐标介于 0 和 1 之间,但 I 和 Q 坐标可以是正数或负数。在所有其他空间中,坐标都在 0 到 1 之间。

    您需要将每个值除以255. 以获得预期的输出:

    >>> colorsys.rgb_to_hsv(64/255., 208/255., 61/255.)
    (0.3299319727891157, 0.7067307692307692, 0.8156862745098039)
    

    【讨论】:

    • 第一个值呢?在在线转换器说 120°
    • 0.3299319727891157 乘以360 得到118.77551020408164 接近120
    • @DanD。与OpenCV对比后,我认为h应该乘以180,sv乘以255:green = np.uint8([[[0,255,0 ]]]); hsv = cv2.cvtColor(green, cv2.COLOR_RGB2HSV); array([[[ 60, 255, 255]]], dtype=uint8); then: hsv2 = colorsys.rgb_to_hsv(0, 1, 0); (180*hsv2[0], 255*hsv2[1], 255*hsv2[2]) ; (60.0, 255.0, 255)
    • 而上图的具体例子:colorsys.rgb_to_hsv(64/255., 208/255., 61/255.); (0.3299319727891157, 0.7067307692307692, 0.8156862745098039); x = colorsys.rgb_to_hsv(64/255., 208/255., 61/255.); print(x[0]*180); Out[194]: 59.38775510204082 ; Then, using openCV: col = np.uint8([[[64, 208, 61 ]]]); hsv = cv2.cvtColor(col, cv2.COLOR_RGB2HSV); print(hsv) Out[197]: array([[[ 59, 180, 208]]], dtype=uint8)
    猜你喜欢
    • 1970-01-01
    • 2014-04-09
    • 2018-10-31
    • 2012-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多