PythonのPillowで画像処理入門 Part 3:ピクセル操作編

この記事は、Pythonの画像処理ライブラリPillowの解説シリーズの最終回です。今回は、画像を構成する一つ一つの点であるピクセルの色を直接読み取ったり、書き換えたりする方法について解説します。


目次

1. ピクセルの色を取得する:getpixel()

.getpixel()メソッドを使うと、指定した座標のピクセルの色情報を取得できます。座標は(x, y)のタプルで指定し、原点(0, 0)は画像の左上隅です。

戻り値は、画像のカラーモードに応じた色のタプルです。例えば、'RGBA'モードの画像であれば、(赤, 緑, 青, 透明度)の4つの値を持つタプルが返されます。

from PIL import Image

try:
    img = Image.open('sample.png')
    
    # (0, 0)と(50, 100)のピクセルの色を取得
    rgba_at_0_0 = img.getpixel((0, 0))
    rgba_at_50_100 = img.getpixel((50, 100))
    
    print(f"座標(0, 0)の色: {rgba_at_0_0}")
    print(f"座標(50, 100)の色: {rgba_at_50_100}")

except FileNotFoundError:
    print("エラー: sample.pngが見つかりません。")

2. ピクセルの色を設定する:putpixel()

.putpixel()メソッドは、.getpixel()とは逆に、指定した座標のピクセルの色を特定の色に設定します。

putpixel((x, y), 色)

  • (x, y): 色を変更したいピクセルの座標。
  • : 設定したい色。画像のモードに合わせたタプル(例: (255, 0, 0, 255))で指定します。

以下の例では、新しい画像を作成し、ループ処理を使ってピクセル単位で色を設定しています。

from PIL import Image

# 100x100の新しい透明な画像を作成
new_img = Image.new('RGBA', (100, 100))

# 左半分(xが0から49まで)を赤色に設定
for x in range(50):
    for y in range(100):
        # (Red, Green, Blue, Alpha)
        new_img.putpixel((x, y), (255, 0, 0, 255))

new_img.save('pixel_art.png')
print("pixel_art.png を作成しました。")

3. ImageColorモジュール

色のRGBA値を直接タプルで指定する代わりに、ImageColorモジュールを使うと、'red''blue'といった一般的な色名を対応するRGBA値に変換できます。これにより、コードがより直感的で読みやすくなります。

from PIL import Image, ImageColor

# 'red'という色名をRGBAタプルに変換
red_rgba = ImageColor.getcolor('red', 'RGBA')
print(f"'red'のRGBA値: {red_rgba}") # 出力: (255, 0, 0, 255)

# 前の例の続きとして、右半分をライトグレイに設定
light_gray_rgba = ImageColor.getcolor('lightgray', 'RGBA')

# for x in range(50, 100):
#     for y in range(100):
#         new_img.putpixel((x, y), light_gray_rgba)

# new_img.save('pixel_art_updated.png')

まとめ

今回は、Pillowを使ったピクセル単位での画像操作について解説しました。.getpixel()で特定の位置の色情報を読み取り、.putpixel()で色を書き換えることができます。これらの低レベルな操作は、画像に図形を描画したり、特定の色を別の色に置き換えたりといった、より高度な画像処理の基礎となります。

この3回にわたるシリーズで、Pillowを使った基本的な画像操作は一通りマスターできたはずです。ぜひこれらの知識を応用して、自分だけの画像処理プログラムを作成してみてください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次