note.nkmk.me

Python, Pillowで画像を回転するrotate

Date: 2017-11-29 / tags: Python, Pillow, 画像処理
このエントリーをはてなブックマークに追加
スポンサーリンク

Image.rotate()を使う

Pythonの画像処理ライブラリPillow(PIL)のImageモジュールに、画像を回転するメソッドrotate()が用意されている。

Pillow(PIL)のインストール、基本的な使い方などは以下の記事参照。

回転ではなく上下反転、左右反転はImageOpsモジュールのflip(), mirror()を使う。以下の記事を参照。

コード例

処理する画像を読み込む。

from PIL import Image

im = Image.open('data/src/lena.jpg')

lena

回転角度

rotate()では回転角度をdegree(度)で指定する。回転方向は反時計回り。

90度回転。

im_rotate = im.rotate(90)

Pillow rotate 90

45度回転。

im_rotate = im.rotate(45)

Pillow rotate 45

引数expand

上の出力画像から分かるように、デフォルトでは出力画像のサイズは入力画像のサイズと等しくなり、領域外の部分は切り取られてしまう。

回転した画像全体を残したい場合は引数expandTrueにする。

im_rotate = im.rotate(90, expand=True)

Pillow rotate 90 expand

im_rotate = im.rotate(45, expand=True)

Pillow rotate 45 expand

引数resample

引数resampleでリサンプリングの際に使用するフィルターを指定できる。

  • Image.NEAREST: ニアレストネイバー (デフォルト)
  • Image.BILINEAR: バイリニア
  • Image.BICUBIC: バイキュービック

Image.BICUBICすると細部がキレイになる。

im_rotate = im.rotate(45, expand=True, resample=Image.BICUBIC)

Pillow rotate 45 expand bicubic

引数center

引数centerで回転の中心位置を指定できる。デフォルトは画像の中心が回転の中心。

im_rotate = im.rotate(45, center=(0, 60))

Pillow rotate 45 change center

expand=Trueの場合、centerの値は考慮されず、画像中心で回転したとみなして範囲が決定する。

im_rotate = im.rotate(45, center=(0, 60), expand=True)

Pillow rotate 45 change center expand

イマイチ使いどころが分からない…。

引数translate

引数translateで回転前に平行移動させることができる。(x方向の移動距離, y方向の移動距離)で指定する。

分かりやすいように、まず回転角度を0度(無回転)とした例を示す。

im_rotate = im.rotate(0, translate=(100, 50))

Pillow rotate 0 translate

45度にすると以下のようになる。

im_rotate = im.rotate(45, translate=(100, 50))

Pillow rotate 45 translate

expand=Trueの場合、translateの値は考慮されず、平行移動がない状態で回転したとみなして範囲が決定する。

im_rotate = im.rotate(45, translate=(100, 50), expand=True)

Pillow rotate 45 translate expand

centerと同じくtranslateも使いどころがよく分からない。

スポンサーリンク
シェア
このエントリーをはてなブックマークに追加

関連カテゴリー

関連記事