Python
 Computer >> コンピューター >  >> プログラミング >> Python

【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_yiqRGB座標からYIQ座標へ変換0〜1
rgb_to_hlsRGB座標からHLS座標へ変換0〜1
rgb_to_hsvRGB座標からHSV座標へ変換0〜1
yiq_to_rgbYIQ座標からRGB座標へ変換-1〜1
hls_to_rgbHLS座標からRGB座標へ変換0〜1
hsv_to_rgbHSV座標から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()関数で小数点以下の桁数を揃えるのがおすすめです。


  1. PythonのpyqrcodeモジュールでQRコードを生成する方法

    QRコードは、白い背景の上に黒い四角形を格子状に配置した2次元コードで、カメラなどの画像読み取り装置によって読み取ることができます。商業用途での在庫追跡や決済、ウェブサイトへのログインなど、スマートフォンユーザー向けのさまざまなアプリケーションで広く利用されています。Pythonではpyqrcodeモジュールを使うことで、簡単にQRコードを生成できます。QRコードには、データを効率的に格納するための4つの標準エンコードモード(数値モード、英数字モード、バイト/バイナリモード、漢字モード)が用意されています。英数字のQRコードを生成するpyqrcodeモジュールには、QRコードを生成するためのc

  2. Pythonのgetpassモジュールとは?パスワード入力とユーザー名取得の基本を解説

    Pythonの標準ライブラリには、ターミナル上で動作するアプリケーションにおいて、ユーザーの認証情報を検証してから処理を実行したい場合に役立つgetpassモジュールが用意されています。このモジュールには主に2つの関数が定義されており、セキュリティを意識したコマンドラインツールの開発に欠かせない存在です。 getpass() 関数:パスワードを安全に入力する getpass()関数は、ユーザーにパスワードの入力を促すための関数です。デフォルトでは、ターミナルに入力されたキーは画面に表示(エコー)されないため、第三者にパスワードを盗み見られる心配がありません。 また、プロンプトとして表示される