kakashi-blog・カカシブログ・

Python備忘録を書きドローンやバイクなど好きな事で生きて行こうとしているブログ

Python

PythonのPillowで画像処理|切り抜き・回転・リサイズの基本

投稿日:2020年2月20日 更新日:

画像処理というと大げさですが、PythonのPillow(ピロー)を使って、画像を少し操作してみました。

結論から言うと、Image.open() で読み込めば、crop() で切り抜き、rotate() で回転、resize() で大きさの変更、save() で保存 ができます。

要点

  • インストールは pip install pillow、読み込むときは from PIL import Image です
  • 画像の大きさは im.size で(横, 縦)のピクセル数がわかります
  • 切り抜きは、左上と右下の位置を指定します
  • 保存するとき、同じ名前のファイルがあると上書きされるので注意してください

Pillowをインストールする

pip install pillow

Pillowは、昔の「PIL(Python Imaging Library)」を引き継いだライブラリです。そのため、インストールするときの名前は「pillow」ですが、読み込むときは昔の名前の「PIL」を使います。

画像を読み込んで表示する

from PIL import Image

im = Image.open(r'C:\Users\ユーザー名\Pictures\masuku.png')
im.show()
Pillowで読み込んだマスクの画像

Image.open() に画像ファイルの場所(フルパス)を入れると、画像が変数 im に入ります。im.show() で、パソコンの画像を見るソフトが開いて表示されます。

なお、IDLEやJupyterでは、im と書くだけでも画像が表示されます。私は最初そうしていましたが、ふつうのPythonファイルでは表示されないので、show() を使うのが確実です。

ファイルの場所の書き方

Windowsのファイルの場所は \(円マーク)で区切りますが、Pythonでは \ が特別な意味を持つ文字です。場所の前に r を付けて r'C:\Users\...' と書くか、\\ と2つ重ねて書いてください。

画像の大きさを調べる

print(im.size)

結果は (189, 108) でした。この画像は、横189×縦108ピクセルです。

画像を切り抜く(crop)

i = im.crop((10, 20, 150, 70))
i.show()
Pillowのcropで切り抜いたマスクの画像

crop() は、範囲を指定して画像を切り抜きます。カッコの中は(左, 上, 右, 下)の位置です。この例では、横10・縦20ピクセルの位置から、横150・縦70ピクセルの位置までを切り抜いています。できる画像は、横140×縦50ピクセルになります。

画像を回転する(rotate)

ro = im.rotate(180)
ro.show()
Pillowのrotateで180度回転させたマスクの画像

rotate() に角度を入れると、その角度だけ回転します。上の例は180度回転させたものです。

大きさを変える(resize)

sm = im.resize((95, 54))

resize() に(横, 縦)のピクセル数を入れると、その大きさになります。縦横の比率を変えたくないときは、元の大きさ(189×108)と同じ比率の数字にしてください。

白黒にする

gray = im.convert('L')

convert('L') で、白黒(グレースケール)の画像になります。

画像を保存する(save)

ro.save(r'C:\Users\ユーザー名\Pictures\masuku2.png')

save() で保存します。フォルダに同じ名前のファイルがあると上書きされ、なければ新しく作られます。元の画像を残しておきたいときは、別の名前にしてください。

まとめ

  • pip install pillow でインストールし、from PIL import Image で読み込みます
  • Image.open() で画像を開き、show() で表示します
  • 切り抜きは crop()、回転は rotate()、大きさの変更は resize()、白黒は convert('L') です
  • save() は同じ名前だと上書きされるので注意してください

これくらいの知識があれば、いろいろ組み合わせて画像の編集や整理ができます。Pythonでほかのファイルを扱う方法は、Pythonプログラミング備忘録 ―エクセル操作編にまとめています。

-Python
-, ,

執筆者:


comment

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です

関連記事

カプレカ数をPythonで求める|20桁まで一気に計算

6174や495のような「カプレカ数」を、Pythonで求めてみました。 結論から言うと、1つずつ数字を調べる方法では、5分回しても6個目が出てきませんでした。ところが、数字の並べ方(組み合わせ)で調 …

PythonでFizzBuzz問題を書く|3通りの書き方と1行コード

プログラミングの入門でよく出てくる「FizzBuzz問題」を、Pythonで書いてみました。 結論から言うと、3で割り切れるか、5で割り切れるか、両方か、を if で分けるだけ です。この記事では、私 …

Seleniumの使い方入門|ブラウザを開いてスクロールする

Pythonでウェブブラウザを動かしてみたいと思い、Seleniumというライブラリを使ってみました。この記事では、Chromeを自動で開いて、ページを一番下までスクロールし、また一番上に戻るところま …

PythonでExcelを操作する方法|openpyxlの基本

Pythonの勉強で覚えた、Excelを操作する方法をまとめました。初心者向けの備忘録です。 結論から言うと、openpyxlで load_workbook() で開き、wb[‘シート名’] でシート …

Seleniumで自動ログインする方法|Python備忘録

前回はSeleniumでブラウザをスクロールさせました。今回は、ログイン画面にIDとパスワードを自動で入力して、ログインするところまでやってみます。 結論から言うと、開発者ツール(F12)で入力欄とボ …