Python で画像を操作する

シェアする

Python で画像を操作します。Python で画像を操作する代表的なパッケージと言えば Pillow でしょう。別のパッケージとしては、OpenCV パッケージがありますが、私は使ったことがないです。ということで、今回は Pillow を使った画像操作の実装について説明したいと思います。

バージョン

  • Python 3.5.4
  • Pillow 6.0.0

環境構築

実装を始める前に、まずは環境を構築していきます。

venv 仮想環境の作成

python -m venv venv
source venv/bin/activate

Python venv を使って、仮想環境を作ります。仮想環境の作成は、必須ではないですが、OSを汚したくないのであれば、やった方がいいでしょう。

Pillow インストール

pip install Pillow

仮想環境を作成し、アクティベートしたら、そこに Pillow をインストールします。

Python で画像を操作する

dog.jpg

それでは、画像の操作について実装を始めていきたいと思います。

これから実装を始めていきますが、プログラムの中では、上の犬の画像 dog.jpg を元に画像を操作していきます。手元の環境で実行したい人は、ダウンロードしてください。

画像を切り抜く(トリミング)

from PIL import Image

dog_im = Image.open('dog.jpg')
cropped = dog_im.crop((190, 107, 407, 249))
cropped.save('cropped.jpg')

画像を切り抜くプログラムです。open 関数でファイルを読み込み、crop 関数で切り抜きます。crop 関数の引数はドキュメントでは以下のような説明になっています。切り抜きスタートのx座標とy座標(左上)、切り抜きエンドのx座標とy座標(右下)をタプルで渡します。ちょっと言葉での説明が難しいですね・・・

The crop rectangle, as a (left, upper, right, lower)-tuple.

プログラムを実行すると、以下のようになります。

cropped.jpg

画像をコピー&ペースト

from PIL import Image

dog_im = Image.open('dog.jpg')
cropped = dog_im.crop((190, 107, 407, 249))
copied = dog_im.copy()
copied.paste(cropped, (0, 0))
copied.save('pasted.jpg')

画像のコピペするプログラムです。ペーストする画像は、先ほど切り取った画像です。paste 関数の第二引数は、ペースト開始位置をx、y座標で指定する感じです。

プログラムを実行すると、以下のようになります。

pasted.jpg

画像のサイズを変更(リサイズ)する

from PIL import Image

dog_im = Image.open('dog.jpg')
width, height = dog_im.size
resize_im = dog_im.resize((int(width / 2), int(height / 2)))
resize_im.save('resize.jpg')

thumb_im = dog_im.copy()
thumb_im.thumbnail((100, 100))
thumb_im.save('thumbnail.jpg')

画像のサイズを変更するプログラムです。サイズ変更は、リサイズ関数 resize 関数とサムネイル関数 thumbnail 関数の2つの関数があります。

resize 関数は、その名と通り、指定するサイズに変更しますが、thumbnail 関数は、縦横比を維持しながらのサイズ変更になります。

また、戻り値で画像を返すか、オブジェクト画像を直接変更するかの違いもあります。

プログラムを実行すると、以下のようになります。

resize.jpg

thumbnail.jpg

画像を回転する

from PIL import Image

dog_im = Image.open('dog.jpg')
dog_im.rotate(90).save('rotated90.jpg')
dog_im.rotate(180).save('rotated180.jpg')
dog_im.rotate(270).save('rotated270.jpg')

画像を回転するプログラムです。rotate 関数に回転させたい角度を引数で渡すだけです。

プログラムを実行すると、以下のようになります。

rotated90.jpg

rotated180.jpg

rotated270.jpg

まとめ

Python で画像を操作しました。もっとも利用頻度が高そうな、操作を説明しましたが、Pillow はまだまだ沢山の機能があります。一度ドキュメントに目を通すといいかもしれません。

シェアする

フォローする