来自 RGB 的错误 HSV 转换
Wrong HSV conversion from RGB
我有这些包含 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
.
我的错误在哪里?
您用于验证的工具的色相范围为 [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]
尽管@FBergo 的回答是正确的,但我想补充一点,这些转换(乘以...)是 type-dependent,并且必须小心使用 8UC3
、16SC3
、32SC3
、32FC3
等的转换。
我有这些包含 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
.
我的错误在哪里?
您用于验证的工具的色相范围为 [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]
尽管@FBergo 的回答是正确的,但我想补充一点,这些转换(乘以...)是 type-dependent,并且必须小心使用 8UC3
、16SC3
、32SC3
、32FC3
等的转换。