【Python入門】colorsysモジュールでRGB・YIQ・HLS・HSV色空間を相互変換する方法
Python標準ライブラリのcolorsysモジュールは、RGB(Red Green Blue:赤・緑・青)で表現された色の値を、他の色空間との間で双方向に変換するための機能を提供します。
対応している色空間
colorsysモジュールが扱えるのは、RGB以外に次の3つの色空間です。
- YIQ(Luminance / In-phase Quadrature):輝度(Y)と同相成分(I)・直交成分(Q)。かつてのアナログテレビ放送などで使われてきた色空間です。
- HLS(Hue Lightness Saturation):色相・明度・彩度で色を表現します。
- HSV(Hue Saturation Value):色相・彩度・明度(Value)で色を表現します。
各座標値は、YIQ色空間のIおよびQの値を除き、すべて0〜1の範囲で指定します。
主な関数一覧
モジュールが提供する関数とその目的は下表のとおりです。
| 関数名 | 目的 | 許容される値の範囲 |
|---|---|---|
| rgb_to_yiq | RGB座標からYIQ座標へ変換 | 0〜1 |
| rgb_to_hls | RGB座標からHLS座標へ変換 | 0〜1 |
| rgb_to_hsv | RGB座標からHSV座標へ変換 | 0〜1 |
| yiq_to_rgb | YIQ座標からRGB座標へ変換 | -1〜1 |
| hls_to_rgb | HLS座標からRGB座標へ変換 | 0〜1 |
| hsv_to_rgb | HSV座標からRGB座標へ変換 | 0〜1 |
サンプルコード
ここでは「エレクトリックブルー」と呼ばれる鮮やかな青色(RGB = 0.47, 0.91, 1.00)を例に、3つの色空間への変換と逆変換を行います。
import colorsys as csys
# 「エレクトリックブルー」
r, g, b = 0.47, 0.91, 1.00
print("エレクトリックブルーのRGB値:", (r, g, b))
# RGB → YIQ → RGB
y, i, q = csys.rgb_to_yiq(r, g, b)
print("YIQ", (y, i, q), "→ 復元結果:", csys.yiq_to_rgb(y, i, q))
# RGB → HSV → RGB
h, s, v = csys.rgb_to_hsv(r, g, b)
print("HSV", (h, s, v), "→ 復元結果:", csys.hsv_to_rgb(h, s, v))
# RGB → HLS → RGB
h, l, s = csys.rgb_to_hls(r, g, b)
print("HLS", (h, l, s), "→ 復元結果:", csys.hls_to_rgb(h, l, s))
実行結果
上記のコードを実行すると、次のような出力が得られます。
エレクトリックブルーのRGB値: (0.47, 0.91, 1.0) YIQ (0.7879, -0.292513, -0.06563100000000005) → 復元結果: (0.47, 0.9100000000000001, 1.0) HSV (0.5283018867924528, 0.53, 1.0) → 復元結果: (0.47, 0.9099999999999999, 1.0) HLS (0.5283018867924528, 0.735, 1.0) → 復元結果: (0.4700000000000001, 0.9099999999999998, 0.9999999999999999)
注意点:浮動小数点の誤差について
実行結果を見ると、「0.47」が「0.4700000000000001」のように、ごくわずかな誤差を含んでいることがわかります。これはPythonの浮動小数点数(float型)における丸め誤差によるもので、色変換処理特有の問題ではありません。表示を見やすくしたい場合は、round()関数で小数点以下の桁数を揃えるのがおすすめです。
-
PythonのpyqrcodeモジュールでQRコードを生成する方法
QRコードは、白い背景の上に黒い四角形を格子状に配置した2次元コードで、カメラなどの画像読み取り装置によって読み取ることができます。商業用途での在庫追跡や決済、ウェブサイトへのログインなど、スマートフォンユーザー向けのさまざまなアプリケーションで広く利用されています。Pythonではpyqrcodeモジュールを使うことで、簡単にQRコードを生成できます。QRコードには、データを効率的に格納するための4つの標準エンコードモード(数値モード、英数字モード、バイト/バイナリモード、漢字モード)が用意されています。英数字のQRコードを生成するpyqrcodeモジュールには、QRコードを生成するためのc
-
Pythonのgetpassモジュールとは?パスワード入力とユーザー名取得の基本を解説
Pythonの標準ライブラリには、ターミナル上で動作するアプリケーションにおいて、ユーザーの認証情報を検証してから処理を実行したい場合に役立つgetpassモジュールが用意されています。このモジュールには主に2つの関数が定義されており、セキュリティを意識したコマンドラインツールの開発に欠かせない存在です。 getpass() 関数:パスワードを安全に入力する getpass()関数は、ユーザーにパスワードの入力を促すための関数です。デフォルトでは、ターミナルに入力されたキーは画面に表示(エコー)されないため、第三者にパスワードを盗み見られる心配がありません。 また、プロンプトとして表示される