HSV 色空間は、色相(Hue)、彩度(Saturation)、明度(Value)の 3 要素で色を表している。色相は、赤、黄、緑、青などのような色の種類を表している。色相は環状となっていて、0 ≤ H ≤ 360 までの値をとることができる。また、彩度は、色の鮮やかさを表し、0 ≤ S ≤ 100 までの値をとる。明度は、色の明るさを表し、0 ≤ V ≤ 100 までの値をとる。
明度を 20、58、100 にしたときに、H および S の組み合わせによって、次のような色を表現することができる。なお、次の図は OpenCV を利用して視覚した画像で、H、S、および V の取りうる値は、実際の HSV 色空間の定義と少し異なる。
OpenCV
OpenCV で HSV 色空間を取り扱うとき、H、S、V の値の範囲は、それぞれ 0 ≤ H ≤ 179、0 ≤ S ≤ 255、0 ≤ V ≤ 255 となっている。上の HSV 色空間の図は、次の Python スクリプトで作図できる。
import cv2
import numpy as np
from PIL import Image
from matplotlib import pyplot as plt
V = 255.0
img_HSV = []
for H in np.arange(0, 179, 0.1):
_r = []
for s in np.arange(0, 255, 0.1):
_p = [H, s, V]
_r.append(_p)
img_HSV.append(_r)
img_HSV = np.array(img_HSV, np.uint8)
img_BGR = cv2.cvtColor(img_HSV, cv2.COLOR_HSV2BGR)
img_RGB = cv2.cvtColor(img_HSV, cv2.COLOR_HSV2RGB)
img = Image.fromarray(img_RGB)
fig = plt.figure(figsize=(25.5, 17.9), dpi=72)
ax = fig.add_subplot(111)
ax.imshow(np.asarray(img), origin='lower')
y_labels = [0, 50, 100, 150, 179]
y_ticks = [_y * 10 for _y in y_labels]
x_labels = [0, 50, 100, 150, 200, 255]
x_ticks = [_x * 10 for _x in x_labels]
ax.set_xticks(x_ticks)
ax.set_xticklabels(x_labels, fontsize=60)
ax.set_yticks(y_ticks)
ax.set_yticklabels(y_labels, fontsize=60)
ax.set_xlabel('S', fontsize=60)
ax.set_ylabel('H', fontsize=60)
#fig.show()
fig.savefig('HSV_color_space.png')