OpenCV HSV与RGB颜色模型的区别
HSV与RGB颜色模型的区别
HSV(Hue, Saturation, Value)和 RGB(Red, Green, Blue)是两种不同的颜色表示方式,主要区别如下:
对比项 | RGB | HSV |
---|---|---|
定义 | 基于红、绿、蓝三原色的混合 | 基于色相(H)、饱和度(S)、明度(V)的直观描述 |
适用场景 | 显示器、数字图像处理(计算机直接使用) | 调色板、图像编辑(更符合人类感知) |
颜色调整 | 修改R、G、B分量(不直观) | 调整H(颜色)、S(鲜艳度)、V(亮度)更直观 |
表示方式 | 三个数值(0-255或者0-1) | H(0-360°)、S(0-100%)、V(0-100%) |
颜色空间 | 线性叠加(加色模型) | 圆柱/圆锥模型(更接近人眼感知) |
典型应用 | 网页颜色(#RRGGBB)、计算机图形 | Photoshop 调色、颜色选择器 |
1. RGB(红绿蓝)
- 原理:通过 红(R)、绿(G)、蓝(B) 三个分量的不同强度混合成各种颜色。
特点:
- 加色模型(叠加越亮,如 R+G+B=白色)。
- 适用于显示器、摄像头等电子设备。
- 调整颜色不直观(比如想调“更深的红色”需要同时改 R、G、B)。
示例:
- 纯红色:(255, 0, 0)
- 黑色:(0, 0, 0)
- 白色:(255, 255, 255)
2. HSV(色相、饱和度、明度)
- 原理:用 色相(H)、饱和度(S)、明度(V) 描述颜色。
-
- H(Hue):颜色类型(0°-360°,如 0°=红,120°=绿,240°=蓝)。
-
- S(Saturation):颜色鲜艳程度(0%=灰色,100%=纯色)。
-
- V(Value):亮度(0%=黑色,100%=最亮)。
特点
- 更符合人咧对颜色的感知,调色更加直观
- 适用于设计、美术、图像处理(如调整“饱和度”或“色相”)
实例
- 纯红色: (0°, 100%, 100%)
- 灰色:(0°, 0%, 50%)
- 深蓝色:(240°, 100%, 50%)
3、相互转换
- RGB → HSV:计算色相角度、饱和度、亮度。
- HSV → RGB:根据 H、S、V 计算对应的 R、G、B 值。
代码实现
import colorsys
# RGB 转 HSV(输入范围 0-1)
h, s, v = colorsys.rgb_to_hsv(1.0, 0.0, 0.0) # 红色 → (0.0, 1.0, 1.0)
# HSV 转 RGB
r, g, b = colorsys.hsv_to_rgb(0.0, 1.0, 1.0) # 红色 → (1.0, 0.0, 0.0)
import cv2 as cv
#读图
cat = cv.imread('../../images/cat1.png')
#转灰度
gray = cv.cvtColor(cat, cv.COLOR_BGR2GRAY)
print(gray.shape)
cv.imshow('gray', gray)
#转HSV
hsv = cv.cvtColor(cat, cv.COLOR_BGR2HSV)
cv.imshow('hsv', hsv)
#转RGB
rgb = cv.cvtColor(cat, cv.COLOR_BGR2RGB)
cv.imshow('rgb', rgb)
cv.waitKey(0)
cv.destroyAllWindows()
4、如何选择
- 用 RGB:编程、网页设计、显示器显示。
- 用 HSV:调色、图像处理(如调整亮度/饱和度)、美术设计。
HSV 的优势在于 更符合人类直觉,比如:
-
想调“浅蓝色”?增加 V(明度)。
-
想调“更鲜艳的绿色”?增加 S(饱和度)。
-
想换颜色?直接改 H(色相)。
而 RGB 需要同时调整多个分量,不够直观。