PythonのPillowモジュールで画像処理のやり方|画像の回転、サムネイル、ぼかし等の解説をする

スポンサーリンク

学習者の本日のチュートリアルでは、Pythonの興味深い、まだ知られていないモジュールであるPillowモジュールについて学びます。まず、Pillowモジュールとは何か、なぜ使われるのかを理解しましょう。

スポンサーリンク

Pillow Moduleとは?

Pillowは画像処理で最も重要なモジュールの一つであるPIL(Python Image Library)モジュールの上に構築されています。しかし、PILモジュールは現在Python3ではサポートされていません。

そこで、Pillowモジュールは基本的にPILモジュールの代用品であり、より多くの機能を備えています。Python3でもサポートされています。このモジュールを使えば、デジタル画像に対してほとんど何でも実現することができます

Python Pillow モジュールの実装

さて、Pillowモジュールについて少しわかったと思います。では、その実装方法を学んでいきましょう。

1. モジュールのインポートと初期イメージのロード

Pillow モジュールは PIL モジュールと同様にインポートされ、初期イメージは Image サブモジュールの open 関数を用いてロードされます。

画像を表示するには、画像を読み込む際に作成した変数 image に対して show 関数を使用します。そのためのコードを以下に示します。

1
2
3
from PIL import Image
im = Image.open("image1.jpg")
im.show()

出力された画像は別のウィンドウに表示され、その結果は以下のようになります。

1
2
im_rotate = im.rotate(40)
im_rotate.show()

2. 画像を回転させる

画像を回転させるには、以下のコードのように rotate 関数を使用するだけです。また、出力はコードのすぐ下に表示されます。

1
2
3
img1 = Image.open('image1.jpg')
img1.thumbnail((200,200))
img1.show()
1
2
3
4
5
6
from PIL import ImageFilter
img2 = Image.open('image1.jpg')
img2.convert('RGB')
img2.show()
blur_img = img2.filter(ImageFilter.BLUR)
blur_img.show()

3. 通常の画像からサムネイルを作成する

すべての画像をある一定の大きさに縮小するためには、サムネイル機能を使って画像をサムネイルに変換することができます。そのためのコードを以下に示す。サムネイル関数は、出力画像の高さと幅をパラメータとして受け取ります。

1
2
3
4
5
from PIL import ImageFilter
img2 = Image.open('image1.jpg')
img2.convert('RGB')
blur_img = img2.filter(ImageFilter.BoxBlur(5))
blur_img.show()
1
2
3
4
5
from PIL import ImageFilter
img2 = Image.open('image1.jpg')
img2.convert('RGB')
blur_img = img2.filter(ImageFilter.GaussianBlur(5))
blur_img.show()

4. 画像をぼかす

PIL モジュールの助けを借りれば、 filter 関数と ImageFilter クラスを使用するだけで、簡単に画像にぼかし効果を加えることができます。

まず、PILモジュールからImageFilterクラスをインポートし、画像をRGBフォーマットに変換してImageFilterが動作するための正確なパレットを取得した後、読み込んだ画像にぼかし効果を適用する必要があります。

PILは、画像にぼかしをかける際に、3種類のぼかし効果を用意しています。

  1. 単純なぼかし
  2. ボックスブラー
  3. ガウシアンブラー

それぞれを順次実装していくことを学習します。

4.1. 簡単なぼかし

以下のコードは、シンプルなぼかし効果を持つ画像を出力します。ぜひ試してみてください。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from PIL import ImageDraw, ImageFont
 
## 1. Loading the image
img = Image.open('image1.jpg')
 
## 2. Creating a drawing object in order to draw on the image
draw = ImageDraw.Draw(img)
 
## 3. Changing the font style and the size of the font to make the watermark clean
font = ImageFont.truetype('arial.ttf', 36)
 
## 4. Drawing the text on the image :
                # Add the x and y position values
                # Enter the text to be drawn
                # Set the font to font created in step 3
draw.text((100, 100),"My first Watermark",font=font)
img.show()
Initial Loaded Image
Initial Loaded Image

4.2. ボックスブラー

ボックスブラーを実装するには、画像に適用されるブラーフィルターの強さである「半径」を指定する必要があります。コードは以下のとおりです。見てみてください。

Rotate Image Output
Rotate Image Output

このコードでは、半径を5としています。半径の値を変えるとどうなるのか、気になりませんか?どうぞ、好きなだけ数字をいじってみてください。

Thumbnail Output Image
Thumbnail Output Image

4.3 ガウシアンブラー

ガウスぼかしは、全く同じパラメータ「半径」を使用しますが、ここでの違いは、ガウスぼかしは、画像に現れるわずかなエッジさえも避けるということです。その結果、さらに滑らかなぼかし効果が得られます。

Blur Effect Output
Blur Effect Output

下の画像では、ガウスぼかしがすべてのエッジを無視し、画像にきれいで均一なぼかし効果を与えていることがわかります。

Box Blur Radius5
Box Blur Radius5

5. 画像に透かしを入れる

クリエイターが自分の画像にどうやって透かしを入れるのか、不思議に思ったことはありませんか?PILモジュールのImageDraw機能を使えば、自分の画像に透かしを入れることができます。

以下に、その方法を説明します。

Gaussian Blur Radius5
Gaussian Blur Radius5
Watermark Added Image
Watermark Added Image

まとめ

今日、あなたは画像処理の新しいモジュールについて学びました。このモジュールにはもっと多くの探求すべきことがありますが、それは後のチュートリアルでカバーすることができます

お気に召していただけたでしょうか?お読みいただきありがとうございました。

これからもチュートリアルをよろしくお願いします。

タイトルとURLをコピーしました