我的这些列表包含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 :(得分:6)
用于验证的工具的Hue范围为[0,359],饱和度和值的范围为[0,100]。对于Hue,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]
答案 1 :(得分:2)
虽然@ FBergo的答案是正确的,但我想补充一点,这些转换(乘以...... )是type-dependent并且必须小心使用8UC3
,16SC3
,32SC3
,32FC3
等转化时。