OpenCV中RGB转HSV结果与预期不符的问题排查
问题根源:OpenCV与MDN的HSV数值范围不匹配
嘿,这个问题我太熟了!本质是OpenCV用的HSV数值范围和MDN这类设计工具完全不一样,才造成了你的误解~
具体范围差异
- OpenCV的HSV(针对8位图像):
- 色相(H):0-179(因为用8位存储,把0-360的色相范围压缩了一半)
- 饱和度(S):0-255(对应百分比0-100%)
- 明度(V):0-255(对应百分比0-100%)
- MDN等设计工具的HSV:
- 色相(H):0-360
- 饱和度(S):0-100(百分比)
- 明度(V):0-100(百分比)
你的例子验证
你给出的RGB值[83, 104, 120],OpenCV转换得到的HSV是[[[103 79 120]]],我们把它转换成MDN的范围看看:
- H:
103 * 2 = 206(和MDN的205几乎一致,差异来自浮点运算后的取整) - S:
(79 / 255) * 100 ≈ 31(和MDN的30接近,同样是取整差异) - V:
(120 / 255) * 100 ≈ 47(和MDN的47完全匹配)
至于你说“呈现绿色”,应该是直接把OpenCV的H值103放到了MDN的0-360范围里查看——103在0-360里确实是偏绿的色调,但它在OpenCV的范围里对应的是206,属于蓝色系,完全没问题。
解决方法
如果要在OpenCV和MDN的HSV值之间转换,只需要做简单的数值映射:
- OpenCV HSV → MDN HSV:
h_mdn = h_cv * 2 s_mdn = round((s_cv / 255) * 100) v_mdn = round((v_cv / 255) * 100) - MDN HSV → OpenCV HSV:
h_cv = h_mdn // 2 s_cv = round((s_mdn / 100) * 255) v_cv = round((v_mdn / 100) * 255)
内容的提问来源于stack exchange,提问作者lucians
相关产品推荐
相关产品推荐

