1. 说明

有时候需要从图像中判断某种颜色,或者获取某个颜色区域,此时常用 HSV 色板判断。因为在 HSV 的色彩空间中,只需要判断颜色通道即可。本篇介绍 HSV 色板,及其在 python 中的转换和使用方法。

2. 色板

(1) RGB

三个通道,红色 Red, 绿色 Green, 蓝色 Blue,值越大颜色越大,当三个值都大时为白色,三个值都为 0 时为黑色。

(1) HSV

三个通道,HSV(Hue, Saturation, Value) 是根据颜色的直观特性创建的一种颜色空间, 也称六角锥体模型 (Hexcone

Model)。这个模型中颜色的参数分别是:色调(H),饱和度(S),明度(V)。

[](https://upload-

images.jianshu.io/upload_images/5357893-5e3dce368c7a1cfb.png?imageMogr2/auto-

orient/strip%7CimageView2/2/w/217)

(1) GRAY
灰度图,只有一个通道。

3. 图示代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import cv2 as cv
from matplotlib import pyplot as plt
% matplotlib inline

img = cv.imread('/tmp/ff.jpeg')
rgb = cv.cvtColor(img, cv.COLOR_BGR2RGB)
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)

hsv = cv.cvtColor(img, cv.COLOR_BGR2HSV)
plt.figure(figsize=(9,7), dpi=800)
plt.subplot(3, 3, 1), plt.imshow(rgb), plt.title("base")
plt.subplot(3, 3, 2), plt.imshow(rgb[:,:,0],'gray'), plt.title("red")
plt.subplot(3, 3, 3), plt.imshow(rgb[:,:,1],'gray'), plt.title("green")
plt.subplot(3, 3, 4), plt.imshow(rgb[:,:,2],'gray'), plt.title("blue")
plt.subplot(3, 3, 5), plt.imshow(gray,'gray'), plt.title("gray")
plt.subplot(3, 3, 6), plt.imshow(hsv[:,:,0],'gray'), plt.title("H")
plt.subplot(3, 3, 7), plt.imshow(hsv[:,:,1],'gray'), plt.title("S")
plt.subplot(3, 3, 8), plt.imshow(hsv[:,:,2],'gray'), plt.title("V")
plt.subplots_adjust(left=0.1, bottom=0.1, right=0.9, top=0.9, hspace=0.1, wspace=0.3)

plt.show()

4. 图示效果

[](https://upload-

images.jianshu.io/upload_images/5357893-78c9cb9f710195c1.png?imageMogr2/auto-

orient/strip%7CimageView2/2/w/558)

5. 分析

这里大多数的图和想象中差不多,比较特别的是 H 图,可以看到同样的底色白色,在 H 图中显示出很大差异。

在判断一些图像成份时,可以采取多种标准,比如用灰度图 (gray) 或者亮度图 (V) 判断其是否为白色或浅色,而在颜色较深的区域再去判断其具体然调 (H)

当 V 大而 S 小时,即是白色。