HSV 色空間

HSV 色空間は、色相(Hue)、彩度(Saturation)、明度(Value)の 3 要素で色を表している。色相は、赤、黄、緑、青などのような色の種類を表している。色相は環状となっていて、0 ≤ H ≤ 360 までの値をとることができる。また、彩度は、色の鮮やかさを表し、0 ≤ S ≤ 100 までの値をとる。明度は、色の明るさを表し、0 ≤ V ≤ 100 までの値をとる。

明度を 20、58、100 にしたときに、H および S の組み合わせによって、次のような色を表現することができる。なお、次の図は OpenCV を利用して視覚した画像で、H、S、および V の取りうる値は、実際の HSV 色空間の定義と少し異なる。

HSV 色空間(V=50) HSV 色空間(V=150) HSV 色空間(V=255)

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')