Pynote

Python、機械学習、画像処理について

Pillow (PIL) - 画像を回転、反転させる方法について

任意の角度回転させる。

Image.rotate で画像を回転できる。

Image.rotate(angle, resample=0, expand=0)
  • 引数
    • angle: 反時計回りの回転角度 (度) を指定する。
    • resample: 補完方法を指定する。
      • PIL.Image.NEAREST: 最近傍補間
      • PIL.Image.BILINEAR: バイリニア補間
      • PIL.Image.BICUBIC: バイキュビック補間
    • expand: True を指定した場合、画像が収まるように回転後に調整を行う。
  • 返り値
    • dst: 回転した画像
from PIL import Image

# 画像を読み込む。
img = Image.open("sample.jpg")

# 反時計回りに画像の中心回りに120度回転する。
dst = img.rotate(129, center=(img.size[0] / 2, img.size[1] / 2))

回転した結果、元の画像にあった画素の一部ははみ出してしまっている。
expand=True を指定することで、元の画像にあった画素がすべて収まるように調整される。

from PIL import Image

# 画像を読み込む。
img = Image.open("sample.jpg")

# 反時計回りに画像の中心回りに120度回転する。
dst = img.rotate(129, center=(img.size[0] / 2, img.size[1] / 2), expand=True)

画素の情報がない部分はデフォルトでは黒で埋められるが、fillcolor を指定することで他の色で埋められる。

from PIL import Image

# 画像を読み込む。
img = Image.open("sample.jpg")

# 反時計回りに画像の中心回りに120度回転する。
dst = img.rotate(
    120, center=(img.size[0] / 2, img.size[1] / 2), fillcolor=(0, 200, 255)
)


画像を 90°、180°、270° 回転させる

Image.transpose で画像を90度単位で画像を回転できる。

Image.transpose(method)
  • 引数
    • method: 変換方法を指定する。
      • PIL.Image.FLIP_LEFT_RIGHT: 左右反転する。
      • PIL.Image.FLIP_TOP_BOTTOM: 上下反転する。
      • PIL.Image.ROTATE_90: 反時計回りに90° (時計回りに270°) 回転させる。
      • PIL.Image.ROTATE_180: 反時計回りに180° (時計回りに180°) 回転させる。
      • PIL.Image.ROTATE_270: 反時計回りに270° (時計回りに90°) 回転する。
      • PIL.Image.TRANSPOSE: 反時計回りに90° (時計回りに270°) 回転させる。
      • PIL.Image.TRANSVERSE: 反時計回りに270° (時計回りに90°) 回転する。
  • 返り値
    • dst: 変換した画像

反時計回りに90° (時計回りに270°) 回転させる。

from PIL import Image

# 画像を読み込む。
img = Image.open("sample.jpg")

# 反時計回りに90° (時計回りに270°) 回転させる。
dst = img.transpose(Image.ROTATE_90)


反時計回りに180° (時計回りに180°) 回転させる。

from PIL import Image

# 画像を読み込む。
img = Image.open("sample.jpg")

# 反時計回りに180° (時計回りに180°) 回転させる。
dst = img.transpose(Image.ROTATE_180)


反時計回りに270° (時計回りに90°) 回転する。

from PIL import Image

# 画像を読み込む。
img = Image.open("sample.jpg")

# 反時計回りに270° (時計回りに90°) 回転する。
dst = img.transpose(Image.ROTATE_270)


画像を反転する。

Image.transpose で画像を上下左右反転できる。

左右反転する。

from PIL import Image

# 画像を読み込む。
img = Image.open("sample.jpg")

# 左右反転する。
dst = img.transpose(Image.FLIP_LEFT_RIGHT)


上下反転する。

from PIL import Image

# 画像を読み込む。
img = Image.open("sample.jpg")

# 上下反転する。
dst = img.transpose(Image.FLIP_TOP_BOTTOM)


上下左右反転する。

上下左右反転することは180°回転させることと等価なので、PIL.Image.ROTATE_180 を指定すればよい。

from PIL import Image

# 画像を読み込む。
img = Image.open("sample.jpg")

# 上下左右反転する。
dst = img.transpose(Image.ROTATE_180)