【问题标题】:How to get HSV and LAB color space?如何获得 HSV 和 LAB 颜色空间?
【发布时间】:2017-04-09 14:35:22
【问题描述】:

我在 Python 中使用 OpenCV。我的代码是:

img_hsv = cv2.cvtColor(image,cv.CV_BGR2HSV)
img_lab = cv2.cvtColor(image,cv.CV_BGR2Lab)

当我访问一个像素值时,我得到的是 RGB 空间中的值,例如:

img_hsv[x][y] = [255,255,255]

如何标准化 HSV 和 LAB 色彩空间? HSV = 360º 100% 100% 和 LAB = 128 100 100

编辑1。回答 Rick M.: 您的解决方案不正确,因为当我像您对 HSV 说的那样翻译 OpenCV 的值时,我得到随机颜色。

例如。 img_hsv的值的原始图像检测:

如果我得到这些值并且我颠倒了顺序,我得到的是 RGB 值:

HSV Value = 16, 25, 230 -> Invert -> 230, 25, 16 = RGB Value
HSV Value = 97, 237, 199 -> Invert -> 199, 237, 97 = RGB Value

所以,当我得到img_hsv 的值时,如果我颠倒我得到RGB 值的顺序... 那么OpenCV 在img_hsv = cv2.cvtColor(image,cv.CV_BGR2HSV) 中做什么呢?我认为 OpenCV 返回 BGR 值...

【问题讨论】:

  • 您是否尝试过拆分频道,例如h, s, v = = cv2.split(img_hsv),将它们一一操作并合并在一起,img = cv2.merge((h,s,v),以获得您想要的结果?
  • 不正确是什么意思?如果你把 HSV 的归一化值用cvtColor 转换成 RGB,当然它会给你不同的颜色。
  • 如果我这样做 img_hsv = cv2.cvtColor(image,cv.CV_BGR2HSV) 所有值都在 BGR 中,我的意思是没有 HSV。有没有办法得到 HSV 值而不是 BGR 值?
  • img_hsv 中的值在 0-255 范围内,但在 OpenCV 颜色空间中是 HSV。您需要使用转换将它们带入一般的 HSV 颜色空间。 (0-360, 0-100, 0-100)
  • 就像我告诉你的那样,如果我这样做,规范化 img_hsv 值,我会得到随机颜色,因为它们在 BGR 中没有 HSV。我做img_hsv = cv2.cvtColor(image,cv.CV_BGR2HSV)img_hsv 中的所有值都在 BGR 中,就像帖子编辑一样。你可以看到图像。 img_hsv[50,50] 返回 BGR 值,我可以用任何 RGB 工具打印它,并且与 HSV 图像颜色相同。如果我想要来自 img_save 的 HSV 值,我必须从 BGR (img_hsv) 转换为 HSV 并且它是有效的

标签: python opencv hsv lab


【解决方案1】:

OpenCV 带来 (0, 255) 范围内所有颜色空间的输出 注意:这取决于 Mat 类型,假设此处为 8UC3

因此,要将 HSV 带入其范围:

H(HSV original) = H(OpenCV) * 2.0
S(HSV original) = S(OpenCV) * 100/255.0

V(HSV original) = V(OpenCV) * 100/255.0

同样适用于 Lab 颜色空间:

L(Lab original) = L(OpenCV) * 100/255.0

a(Lab original) = a(OpenCV) - 128

b(Lab original) = b(OpenCV) - 128

Reference

添加支票,real color conversion, 蟒蛇代码:

image_rgb = np.zeros((300, 300, 3), np.uint8)
image[:] = (255, 255, 255)

img_hsv = cv2.cvtColor(image_rgb, cv2.COLOR_RGB2HSV)
h = img_hsv[100, 100, 0]
s = img_hsv[100, 100, 1]
v = img_hsv[100, 100, 2]
print h , s , v
>>> 0 0 255

【讨论】:

  • 我认为 H 是 H(OpenCV) * 360/255.0,不是吗?
  • 我在帖子的编辑中回答了你。
  • 我的 H 值不好,但我只是按照参考。
  • hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV) print(hsv[47,115]) 返回[ 98 245 202]。转到colorizer.org 并在RGB 部分插入[ 98 245 202] 反转。你会得到像 HSV 图像一样的黄色。所以,print(hsv[47,115]) 返回 BGR 值,没有 HSV 值。尝试像 HSV 一样打印[ 98 245 202] 值,你永远不会得到黄色。
  • 47,115 的 BGR 值是多少?你还是没有明白我的意思。我不能再强调了。
猜你喜欢
  • 1970-01-01
  • 2017-01-12
  • 2021-11-12
  • 1970-01-01
  • 2012-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-08
相关资源
最近更新 更多