コードDE描画

プログラミングで図を描く練習

【pythonista3】Pillowモジュールで画像を編集するImageOpsモジュールの使用例9選

pythonスクリプトでjpgやpmgなどの画像を加工、作成することが出来る。

簡単な画像処理にPillowモジュールが使われる。このモジュールは、読み込んだ画像をもとに新たな画像の作成、保存が出来る。

iOSアプリのpythonista3には標準でこのモジュールがあるがver1.1.7と古い。(2020年5月現在。)

pythonista3内でPillowモジュールが出来ることを紹介する。

以下では、次の6つの操作を説明する。

  • 左右、上下反転
  • 純化
  • mod演算
  • 平均化
  • ハイコントラスト
  • ネガポジ反転

使用環境

使っているアプリの都合上、Pillowモジュールが古い。そのため関数の引数など現在の仕様が若干異なる場合がある。

Pythonista3では最初からPillowモジュールが入っているためインストールは必要がない。

使い方

以下では次の画像を元にする。

sample.png
sample.png

この画像をsample.pngとする。

sample1.png
sample1.png

この画像をsample1.pngとする。

向き反転

左右反転
例1

画像の左右を反転する。

  • 実行結果

左右反転の画像
左右反転の画像

from PIL import Image,ImageOps

# 画像読み込み
img=Image.open('sample.png')
# 左右反転
out=ImageOps.mirror(img)

# 画像を保存
out.save('pillow-ops-1.png')
  • 解説

mirrorメソッドで左右反転する。引数に反転する画像を指定する。

結果=ImageOps.mirror(画像オブジェクト)
上下反転
例2

画像の上下を反転する。

  • 実行結果

上下反転の画像
上下反転の画像

from PIL import Image,ImageOps

# 画像読み込み
img=Image.open('sample.png')
# 上下反転
out=ImageOps.flip(img)

# 画像を保存
out.save('pillow-ops-2.png')
  • 解説

flipメソッドで上下反転する。引数に反転する画像を指定する。

結果=ImageOps.flip(画像オブジェクト)

純化

例3

色のビット深度を落として単純化する。

  • 実行結果

単純化した画像
純化した画像

from PIL import Image,ImageOps

# 画像読み込み
img=Image.open('sample.png')
# 色素を単純化
out=ImageOps.posterize(img,2)

# 画像を保存
out.save('pillow-ops-3.png')
  • 解説

posterizeメソッドで色を単純化する。引数で画像とビット深度を指定する。

結果=ImageOps.posterize(画像オブジェクト,ビット深度)

mod演算

例4

画像のすべてのピクセルで、指定した値より大きい値を剰余演算する。

  • 実行結果

mod演算した画像
mod演算した画像

from PIL import Image,ImageOps

# 画像読み込み
img=Image.open('sample.png')
# 引数の数値以上のピクセルをmad演算
out=ImageOps.solarize(img,192)

# 画像を保存
out.save('pillow-ops-4.png')
  • 解説

solarizeメソッドで剰余演算する。引数で画像と基準値を指定する。

結果=ImageOps.solarize(画像オブジェクト,基準値)

基準値よりも大きい値は255引き算される。

平均化

例5

画像のヒストグラムを平均化する。

  • 実行結果

平均化した画像
平均化した画像

from PIL import Image,ImageOps

# 画像読み込み
img=Image.open('sample.png')
# ピクセル値の平均化
out=ImageOps.equalize(img)

# 画像を保存
out.save('pillow-ops-5.png')
  • 解説

equalizeメソッドで単純化する。引数に元の画像を指定する。

結果=ImageOps.equalize(画像オブジェクト)
例6

もう一つ例を示す。

  • 実行結果

平均化した画像
平均化した画像

from PIL import Image,ImageOps

# 画像読み込み
img=Image.open('sample1.png')
# ピクセル値の平均化
out=ImageOps.equalize(img)

# 画像を保存
out.save('pillow-ops-6.png')

ハイコントラスト

例7

画像のヒストグラムの最小値は0、最大値を255に補正する。

  • 実行結果

ハイコントラストにした画像
ハイコントラストにした画像

from PIL import Image,ImageOps

# 画像読み込み
img=Image.open('sample.png')
  # 最小ピクセルを黒、最大ピクセル白に補正
out=ImageOps.autocontrast(img)

# 画像を保存
out.save('pillow-ops-7.png')
  • 解説

autocontrastメソッドでハイコントラストにする。引数に元の画像を指定する。

結果=ImageOps.autocontrast(画像オブジェクト)
例8

もう一つ例を示す。

  • 実行結果

ハイコントラストにした画像
ハイコントラストにした画像

from PIL import Image,ImageOps

# 画像読み込み
img=Image.open('sample1.png')
  # 最小ピクセルを黒、最大ピクセル白に補正
out=ImageOps.autocontrast(img)

# 画像を保存
out.save('pillow-ops-8.png')

ネガポジ反転

例9

画像の色を補色にして反転する。

  • 実行結果

白黒反転した画像
白黒反転した画像

from PIL import Image,ImageOps

# 画像読み込み
img=Image.open('sample.png')
# ネガポジ反転
out=ImageOps.invert(img)

# 画像を保存
out.save('pillow-ops-9.png')
  • 解説

invertメソッドでネガポジ反転する。引数に反転する画像を指定する。

結果=ImageOps.invert(画像オブジェクト)

まとめ

ImageOpsモジュールで次のような画像加工が出来る。

  • mirrorメソッド:左右反転
  • flipメソッド:上下反転
  • posterizeメソッド:単純化
  • solarizeメソッド:剰余演算
  • equalizeメソッド:単純化
  • autocontrastメソッド:ハイコントラスト
  • invertメソッド:ネガポジ反転

参考リンク