Pythonで画像を回転する(Pillow編)
PythonのPillow(PIL)モジュールを使って、画像を回転します。単純に回転するだけではなく、回転の背景を任意の色(白色)にしてみます。
目次
Pillow(PIL)で回転する
Pillow(PIL) はPythonで画像を扱う際のモジュールの一つです。いろいろな加工が出来ますので、使えるようになると便利です。
画像を回転するには、Imageオブジェクトのrotateメソッドを使用します。
img = PIL.Image.rotate(angle, [resample], [expand])
変数 |
型 |
内容 |
---|---|---|
angle |
float |
回転角度。単位は度。反時計方向を正方向として指定する。 |
resample |
省略可。既定値はPIL.Image.NEAREST。補間方法の指定。 |
|
expand |
bool |
省略可。既定値はFalse。回転した際に画像サイズを大きくするかどうか。 |
img |
Image |
回転した結果のImageオブジェクト。 |
補間方法にはPIL.Image.NEARESTの他に、PIL.Image.BILINEARとPIL.Image.BICUBICがあります。
例えば新聞紙を45度回転すると、回転後の高さと幅は開店前よりも大きくなりますよね。そのときに、出力される画像を元の画像の大きさに維持するのか、それとも元の画像全体が表示されるように画像サイズを拡大するのかを、expandに指定します。
回転の実施例
元画像( プロ生ちゃんのサイト からダウンロードした画像をクロップして256x256にして背景色をつけたものです。)
30度回転してみます。補間方法はPIL.Image.BICUBIC、expandはFalseです。
from PIL import Image
original_image = Image.open('original.png')
roated_image = original_image.rotate(angle=30, resample=Image.BICUBIC, expand=False)
roated_image.save('rotated.png')
回転結果
画像サイズが同じなので、元画像の一部が切れてしまっていますね。
ではexpandをTrueにしてみます。
from PIL import Image
original_image = Image.open('original.png')
roated_image = original_image.rotate(angle=30, resample=Image.BICUBIC, expand=False)
roated_image.save('rotated.png')
回転結果
元画像全体が回転して表示されています。代わりに、画像サイズが350x350に拡大されました。
どちらが良いかは、用途次第です。
背景を白くする方法
上記の回転の結果を見ると、画像を回転したときに出来る隙間が黒色で埋められています。
実際にはこの隙間を白で埋めてほしいことがあります。
rotateメソッドにそういったオプションが見当たらないので、一手間掛けてみます。
元画像のサイズを取得する。
元画像の3倍のサイズの白い画像を作る。
3倍サイズの画像の中央に、元画像を貼り付ける。
回転する。
中央部をクロップする。
from PIL import Image
original_image = Image.open('original.png')
w, h = original_image.size
rotated_image = Image.new('RGB',(3*w,3*h), color=(255,255,255))
rotated_image.paste(original_image, (w, h))
rotated_image = rotated_image.rotate(angle=30, resample=Image.BICUBIC, expand=False)
rotated_image = rotated_image.crop((w,h,2*w,2*h))
rotated_image.save('rotated.png')
隙間が白くなってますね。
公開日
広告
Pythonで画像処理カテゴリの投稿
- Python (Pillow)でグラデーション画像を作る
- PythonでGIFアニメを作る(PILでファイルをつなげる編)
- PythonでOpenCVの画像データをMatplotlibで表示する
- PythonでPDFを画像に変換する(Windows10)
- PythonでPSDファイルをJPEGやPNGに変換する
- Pythonでカラー画像をグレイスケールに変換する(OpenCV編)
- Pythonでフォルダ内に同じ画像がないか検索してみた
- Pythonでマスク画像を作る方法(3選)
- Pythonで図形の外接矩形を描く(OpenCV編)
- Pythonで図形の輪郭の大きさを調べる(OpenCV編)
- Pythonで画像の余白を削除する(OpenCV編)
- Pythonで画像の余白を削除する(Pillow編)
- Pythonで画像の大きさやフォーマットを調べる(Pillow編)
- Pythonで画像の減色をする
- Pythonで画像をトリミングする(Pillow編)
- Pythonで画像を他の画像にペーストする(Pillow編)
- Pythonで画像を回転する(Pillow編)
- Pythonで画像を拡大縮小(リサイズ)する(Pillow編)
- Pythonで画像を読み込み、表示し、保存する(OpenCV編)
- Pythonで画像を読み込み、表示し、保存する(Pillow編)
- Pythonで画像を2値化する(OpenCV編)
- Pythonで記号の輪郭を検出する(OpenCV編)
- PythonとOpenCVで画像をグレースケールに変換してみた
- PythonとOpenCVで画像をネガポジ反転してみた