Python で画像ファイルの読み込み・表示・保存する方法を解説!【Pillow 編】

Python で画像ファイルの読み込み・表示・保存する方法を解説!【 Pillow 編】

こんにちは、機械学習講師をしている満塩です!

Python で画像を読み込み、画面に表示・保存するまでの方法を初学者向けに解説していきます。Python では、Pillow, OpenCV, scikit-image など、画像に対する様々な処理を行なうライブラリが用意されています。数行のコードを書くだけで読み込み、表示や保存だけでなく様々な画像処理ができます。

今回は Pillow を使用して、画像処理の基本となる読み込み、表示や保存の方法について解説していきます。これら以外の Pillow によって行うことができる画像処理も簡単に紹介するので楽しみにしてください!

実行環境

この後の実装は基本的に Google Colaboratory 上で実行することを想定しています。画像の表示の際にだけ Python スクリプトを実行する方法によって表示の方法が異なることを例示するため、PC にインストール済みの Python スクリプトを編集するエディタである Visual Studio Code を使用しています。

  • Mac にインストール済みの Python を使用
  • Visual Studio Code
  • Python : 3.9.13

Pillow とは

Pillow は、画像の回転、反転、リサイズやトリミングのような基本となる画像処理が簡単にできるライブラリです。

Google Colaboratory は既に Pillow がインストールされた環境ですが、OS にインストール済みの Python を使用する場合には Mac であればターミナル、Windows であれば comand prompt などのシェル上で以下のコマンドを実行することでインストールできます。

各種シェル上
pip install Pillow

画像の読み込み

Pillow は PIL というライブラリ名で管理されています。PIL Image をインポートします。

画像の読み込みにはこの Image の open() メソッドを使用して、引数に画像のパスを指定します。

インポートと画像の読み込み
# モジュールの読み込み
from PIL import Image

# 画像の読み込み 
img = Image.open('sample.png')

上記の例では画像のファイル名のみが指定されているように見えますが、正確には画像ファイルのパスを指定する必要があります。簡単に言うと、パスは PC 内でのファイルの場所を示します。
今回は Python を実行している場所と画像ファイルが配置されている場所が同じなので、画像ファイル名を指定するだけで読み込むことができます。パスの指定は画像ファイルに限らずファイルを読み書きする際に常に必要となる考え方ですので、ピンと来ない方は「絶対パス」と「相対パス」について調べてみてください。

画像の表示

画像を表示させる方法は、Python スクリプトの実行をどの環境で行っているかによって表示方法が異なります。Python のコードを実行させる環境は様々あり、代表的なものをご紹介します。

  • ブラウザを使用した環境
    • Google Colaboratory
    • Jupyter Notebook
  • シェル上での対話モードを利用した環境
    • Mac の場合ターミナル
    • Windows の場合 Command Prompt や Power shell
  • コードエディタや IDE(統合開発環境)を使用した環境(py 拡張子のついた python ファイルを使用する)
    • Visual Studio Code
    • PyCharm
    • Spyder

まず、Google Colaboratory や Jupyter Notebook では、画像データが格納された変数を入力して実行するだけでも画像を表示できます。

一方でターミナルや Command Prompt 上で対話モードを開き同様のスクリプトを実行すると、画像は表示されず画像データに関する情報が出力されるのみです。この使い方で画像を表示させたいという方は小数派でしょう。

さらに Visual Studio Code などのコードエディタ上で記述して、 Python ファイル中で上記のスクリプトを実行しても何も出力されません。

この場合 Pillow の show() メソッドを使用して次のようなスクリプトを実行すると、OS のデフォルトの画像ビューアで画像が表示されます。逆にこのメソッドは Google Colaboratory で実行しても何も表示されません。

python ファイル中で show() を使用
# モジュールの読み込み
from PIL import Image

# 画像の読み込み
img = Image.open('sample.png')

# 画像の表示
img.show()

筆者の Mac の場合はデフォルトの「プレビュー」アプリが起動して以下のように表示されました。

以上の内容と上記で示していない内容をまとめると以下の表のようになります。
インラインで表示される、とは Google Colaboratory で表示させたときのように 1 つのセルに対する出力結果として表示されることを意味しています。

実行する環境imgimg.show()
Google Colaboratoryインラインで表示される。何も表示されない。
Jupyter Notebookインラインで表示される。デフォルトの画像ビューアで表示される。
ターミナルでの対話モード画像の情報が出力される。デフォルトの画像ビューアで表示される。
Visual Studio Code何も出力されない。デフォルトの画像ビューアで表示される。

画像の表示方法は環境によって表示の方法が変わるということを知っておきましょう。これは Pillow 以外の画像系のライブラリでも異なっており、自分がどの環境のどのライブラリを使用しているかで表示方法を選ぶ必要があります。

また Google Colaboratory で画像を複数表示したい場合には matplotlib との併用が必要だったり、Streamlit などの Web アプリケーションフレームワークの中で画像を表示させる場合には、独自の画像表示用のメソッドが用意されていたりすることを知っておきましょう。

画像の保存

画像の保存は save() メソッドを使用することで行います。引数の中に保存したい画像のファイル名を指定します。画像の読み込みの時と同様に、正確には保存したい画像のファイル名を含めたパスを指定することで任意の場所に保存できることも覚えておきましょう。

save() メソッドで保存
# 画像を保存
img.save('output.png')

Pillow で可能な画像処理

Pillow について、画像に対する基本的な操作である読み込み、表示や保存のしかたをご紹介しました。最後に Pillow によって可能な画像処理をいくつかご紹介します。もっと知りたい方は以下の公式サイトの Handbook や Reference から調べることができるので、どんなことができるのかイメージだけでも知っておきましょう。

参考 PillowPillow

それではいくつかの画像処理ご紹介していきます。

リサイズ

resize() メソッドの第 1 引数と第 2 引数にリサイズ後の画素数を指定することで、その大きさに伸縮させることができます。

リサイズ
img_resize = img.resize((100, 100))
img_resize

回転

rotate() メソッドの引数に角度を指定することで、反時計方向に回転させることができます。

回転
img_rotate = img.rotate(30)
img_rotate

グレー変換

convert() メソッドの引数に’L’を指定することで、グレースケールの画像に変換させることができます。

グレー変換
img_gray = img.convert('L')
img_gray

2 枚の画像を合成

composit() メソッドの引数に2枚の画像をマスク画像に指定することで合成できます。

まず合成する画像を 2 枚読み込みます。2 枚目の画像は、resize() メソッドを用いて 1 枚目の画像と画像サイズを揃えています。

2 枚の画像を合成
# 画像の読み込み
img1 = Image.open('sample.png')
img2 = Image.open('mandrill.jpg').resize(img1.size)

今回、キカガクのロゴと合成されてしまう画像は、こちらのマンドリルの画像になります。

実際に、composite() メソッドで合成します。今回詳細な原理は割愛しますが、第 3 引数には、new() メソッド階調が 128 のベタ画像で作成したものをマスク画像として指定しています。

画像の合成
mask = Image.new("L", img1.size, 128)
img3 = Image.composite(img1, img2, mask)
img3

以下のように、2 枚の画像が一律の割合で合成された画像を出力できました。

最後に

本記事では Python でいくつかある画像処理を行うためのライブラリの中でもまず Pillow を使用して画像の読み込み、表示や保存のしかたと、いくつかの簡単な画像処理について解説しました。

画像を表示する場合には、Python の実行環境によって適切な表示方法が異なることを知っておきましょう。

実際にこれらの画像ライブラリを実践的に使用していく際には、画像を読み込んだ後に様々な処理を行う場合もあります。それぞれのメソッドの使用によって、画像がどのように処理されるかを確認できるようになっておきましょう。さすれば、自由自在に画像を加工できるようになるでしょう。

こちらの記事もオススメ

まずは無料で学びたい方・最速で学びたい方へ

まずは無料で学びたい方: Python&機械学習入門コースがおすすめ

Python&機械学習入門コース

AI・機械学習を学び始めるならまずはここから!経産省の Web サイトでも紹介されているわかりやすいと評判の Python&機械学習入門コースが無料で受けられます!
さらにステップアップした脱ブラックボックスコースや、IT パスポートをはじめとした資格取得を目指すコースもなんと無料です!

無料で学ぶ

最速で学びたい方:キカガクの長期コースがおすすめ

一生学び放題

続々と転職・キャリアアップに成功中!受講生ファーストのサポートが人気のポイントです!

AI・機械学習・データサイエンスといえばキカガク!
非常に需要が高まっている最先端スキルを「今のうちに」習得しませんか?

無料説明会を週 2 開催しています。毎月受講生の定員がございますので確認はお早めに!

説明会ではこんなことをお話します!
  • 国も企業も育成に力を入れている先端 IT 人材とは
  • キカガクの研修実績
  • 長期コースでの学び方、できるようになること
  • 料金・給付金について
  • 質疑応答