
こんにちは、機械学習講師をしている満塩です!
Python で画像を読み込み、画面に表示・保存するまでの方法を初学者向けに解説していきます。Python では、Pillow, OpenCV, scikit-image など、画像に対する様々な処理を行なうライブラリが用意されています。数行のコードを書くだけで読み込み、表示や保存だけでなく様々な画像処理ができます。
今回は Pillow を使用して、画像処理の基本となる読み込み、表示や保存の方法について解説していきます。これら以外の Pillow によって行うことができる画像処理も簡単に紹介するので楽しみにしてください!
この後の実装は基本的に Google Colaboratory 上で実行することを想定しています。画像の表示の際にだけ Python スクリプトを実行する方法によって表示の方法が異なることを例示するため、PC にインストール済みの Python スクリプトを編集するエディタである Visual Studio Code を使用しています。
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 では、画像データが格納された変数を入力して実行するだけでも画像を表示できます。

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

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

この場合 Pillow の show() メソッドを使用して次のようなスクリプトを実行すると、OS のデフォルトの画像ビューアで画像が表示されます。逆にこのメソッドは Google Colaboratory で実行しても何も表示されません。
# モジュールの読み込み from PIL import Image # 画像の読み込み img = Image.open('sample.png') # 画像の表示 img.show()

以上の内容と上記で示していない内容をまとめると以下の表のようになります。
インラインで表示される、とは Google Colaboratory で表示させたときのように 1 つのセルに対する出力結果として表示されることを意味しています。
実行する環境 | img | img.show() |
|---|---|---|
Google Colaboratory | インラインで表示される。 | 何も表示されない。 |
Jupyter Notebook | インラインで表示される。 | デフォルトの画像ビューアで表示される。 |
ターミナルでの対話モード | 画像の情報が出力される。 | デフォルトの画像ビューアで表示される。 |
Visual Studio Code | 何も出力されない。 | デフォルトの画像ビューアで表示される。 |
画像の表示方法は環境によって表示の方法が変わるということを知っておきましょう。これは Pillow 以外の画像系のライブラリでも異なっており、自分がどの環境のどのライブラリを使用しているかで表示方法を選ぶ必要があります。
また Google Colaboratory で画像を複数表示したい場合には matplotlib との併用が必要だったり、Streamlit などの Web アプリケーションフレームワークの中で画像を表示させる場合には、独自の画像表示用のメソッドが用意されていたりすることを知っておきましょう。
画像の保存は save() メソッドを使用することで行います。引数の中に保存したい画像のファイル名を指定します。画像の読み込みの時と同様に、正確には保存したい画像のファイル名を含めたパスを指定することで任意の場所に保存できることも覚えておきましょう。
# 画像を保存 img.save('output.png')
Pillow について、画像に対する基本的な操作である読み込み、表示や保存のしかたをご紹介しました。最後に Pillow によって可能な画像処理をいくつかご紹介します。もっと知りたい方は以下の公式サイトの Handbook や Reference から調べることができるので、どんなことができるのかイメージだけでも知っておきましょう。
参考|Pillow
確認するそれではいくつかの画像処理ご紹介していきます。
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

composit() メソッドの引数に2枚の画像をマスク画像に指定することで合成できます。
まず合成する画像を 2 枚読み込みます。2 枚目の画像は、resize() メソッドを用いて 1 枚目の画像と画像サイズを揃えています。
# 画像の読み込み 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 の実行環境によって適切な表示方法が異なることを知っておきましょう。
実際にこれらの画像ライブラリを実践的に使用していく際には、画像を読み込んだ後に様々な処理を行う場合もあります。それぞれのメソッドの使用によって、画像がどのように処理されるかを確認できるようになっておきましょう。さすれば、自由自在に画像を加工できるようになるでしょう。
.jpg&w=3840&q=75)
キカガクの長期コースはプログラミング経験ゼロの初学者が最先端技術を使いこなすAIエンジニアになるためのサポート体制が整っています!
実際に未経験からの転職・キャリアアップに続々と成功中です
まずは無料説明会で、キカガクのサポート体制を確認しにきてください!
説明会ではこんなことをお話します!
.png&w=3840&q=75)
AI・機械学習を学び始めるならまずはここから!経産省の Web サイトでも紹介されているわかりやすいと評判の Python&機械学習入門コースが無料で受けられます!
さらにステップアップした脱ブラックボックスコースや、IT パスポートをはじめとした資格取得を目指すコースもなんと無料です!
SHARE
AI/データサイエンス学びはじめの方におすすめの記事
コース一覧
注目記事
新着記事