3

我正在将 OpenCV 与 Python 一起使用。我的代码是:

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_hsvOpenCV 的 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 值...

4

1 回答 1

2

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

参考

添加检查,真实颜色转换,python代码:

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
于 2017-04-10T09:49:24.630 回答