1.RGB色彩空间
概念:
- RGB 代表 Red(红色)、Green(绿色)和 Blue(蓝色)。这三种颜色的光线混合可以生成各种颜色。
色彩表示:
- 颜色通道:每种颜色(红、绿、蓝)通常在0到255的范围内表示,其中0表示无光(黑色),255表示最大亮度。
- 每种颜色可以用三个值表示,例如 (255, 0, 0) 代表红色,(0, 255, 0) 代表绿色,(0, 0, 255) 代表蓝色。
- 组合颜色:通过组合不同的RGB值,可以表示各种颜色。例如,(255, 255, 255) 表示白色,(0, 0, 0) 表示黑色,(255, 255, 0) 表示黄色。
2.HSV色彩空间
概念:
- 色相(H):表示颜色的种类。圆柱的圆周表示色相,角度越大,颜色越不同。
- 饱和度(S):表示颜色的纯度或强度。圆柱的半径表示饱和度,从中心到圆周,饱和度从低到高。
- 明度(V):表示颜色的亮度或强度。圆柱的高度表示明度,从底部的黑色到顶部的纯色。
3.RGB与HSV格式之间的转换
由于RGB图像中将亮度,饱和度等信息也包含在了R、G、B信息中,因此, 处理图像过程中会受到光照的影响,无法获得准确的R、G、B信息,因此需要将RGB图像转化为HSV格式图像进行处理。
- 从HSV到RGB:
- 计算色相对应的RGB值:
- 如果色相在0°到60°之间,计算颜色分量:
C = V * S
,X = C * (1 - |(H / 60°) % 2 - 1|)
- 根据色相值调整颜色分量的顺序。
- 如果色相在0°到60°之间,计算颜色分量:
- 添加偏移量
m
到RGB值:m = V - C
- 计算最终的RGB值:
R = (R + m) * 255
,G = (G + m) * 255
,B = (B + m) * 255
- 计算色相对应的RGB值:
- 从RGB到HSV:
- 计算RGB的最大值
Cmax
和最小值Cmin
,并计算差值Δ = Cmax - Cmin
- 计算明度:
V = Cmax
- 计算饱和度:
S = Δ / Cmax
(如果Cmax
为0,则S
为0) - 计算色相:
- 如果
Δ
为0,则H
为0 - 根据
Cmax
的位置计算色相值
- 如果
- 计算RGB的最大值
4.RGB与HSV格式之间转化代码python格式
def rgb_to_hsv(r, g, b):
r, g, b = r / 255.0, g / 255.0, b / 255.0 # Normalize RGB values to [0, 1]
mx = max(r, g, b)
mn = min(r, g, b)
h = s = v = (mx + mn) / 2.0
c = mx - mn
if c != 0:
if mx == r:
h = (g - b) / c
elif mx == g:
h = (b - r) / c + 2
elif mx == b:
h = (r - g) / c + 4
h *= 60
if h < 0:
h += 360
s = 0 if mx == 0 else (mx - mn) / mx
v = mx
return (h, s * 100, v * 100)
def hsv_to_rgb(h, s, v):
s /= 100.0
v /= 100.0
c = v * s
x = c * (1 - abs(((h / 60) % 2) - 1))
m = v - c
r = g = b = 0
if 0 <= h < 60:
r, g, b = c, x, 0
elif 60 <= h < 120:
r, g, b = x, c, 0
elif 120 <= h < 180:
r, g, b = 0, c, x
elif 180 <= h < 240:
r, g, b = 0, x, c
elif 240 <= h < 300:
r, g, b = x, 0, c
elif 300 <= h < 360:
r, g, b = c, 0, x
r = int((r + m) * 255)
g = int((g + m) * 255)
b = int((b + m) * 255)
return (r, g, b)
# Example usage
rgb_color = (255, 0, 0) # Red
hsv_color = rgb_to_hsv(*rgb_color)
print(f"RGB to HSV: {rgb_color} -> {hsv_color}")
hsv_color = (0, 100, 100) # Red in HSV
rgb_color = hsv_to_rgb(*hsv_color)
print(f"HSV to RGB: {hsv_color} -> {rgb_color}")