【问题标题】:OpenCV converts HSL to RGBOpenCV 将 HSL 转换为 RGB
【发布时间】:2021-06-29 09:11:06
【问题描述】:

我正在使用 OpenCV python 将单个 HSL 值转换为 RGB 值。

由于没有 HSL2RGB 标志,所以我使用 HLS2RGB 标志。我假设 HSL 和 HLS 指的是相同的色彩空间,但只是翻转了 S 和 L 值。对吗?

所以这是我的尝试:

import cv2

hls = (0, 50, 100)  # This is color Red
rgb = cv2.cvtColor( np.uint8([[hls]] ), cv2.COLOR_HLS2RGB)[0][0]

转换后rgb的值为[70,30,30]

但是,当我在在线 RGB 选择器上检查这个 RGB 值时,颜色是深棕色。

知道转换中可能出现的问题吗?谢谢

【问题讨论】:

  • 不应该是hls = (0, 128, 255)吗? uint8 矩阵上升到 256,而不是 100。
  • @Thomas 啊,非常感谢,所以 HSL 值是基于百分比的,而不是绝对值?似乎 S:100 已扩展到其最大值 255(如果开始索引为 0),并且 L: ceil(50% * 255) = 128。这是检索值的正确方法吗?
  • 我试过这个方法将Green HLS (120, 33%, 100%) 转换为RGB,H值是360的度数,所以120/360 * 255 = 85。L是一个百分比,所以 ceil(0.33 * 255) = 85,而 S 也是一个百分比,所以它只是 255。uint8 中的 HLS 值因此是 (85, 85, 255)。但是,从这个 HLS 转换的 RGB 是 (0,170,142),与预期的 RGB (0, 168, 0) 不同。

标签: python opencv hsl


【解决方案1】:

OpenCV 中的 HLS 范围是

H -> 0 - 180
L -> 0 - 255
S -> 0 - 255

所以如果你使用的 HLS 范围是

H -> 0 - 360
L -> 0 - 100
S -> 0 - 100

您必须先将其转换为 OpenCV 的范围

hls = (0, 50, 100)
hls_conv = (hls[0]/2, hls[1]*2.55, hls[2]*2.55)
rgb = cv2.cvtColor(np.uint8([[hls_conv]]), cv2.COLOR_HLS2RGB)[0][0]

这将导致 rgb 为 [254, 0, 0]

【讨论】:

  • 感谢您阐明 OpenCV 的 HLS 范围!这使得解决方案现在变得一清二楚。我会将您的答案标记为解决方案。感谢您的精彩解释。
猜你喜欢
  • 1970-01-01
  • 2016-08-11
  • 1970-01-01
  • 2014-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-04
相关资源
最近更新 更多