LogoMark.png

Pillow のバックアップソース(No.1)

#author("2021-12-06T15:25:48+09:00;2021-08-06T17:33:09+09:00","default:inoue.ko","inoue.ko")
*Pillow(PIL fork)
https://pillow.readthedocs.io/
~

Pillowは、リサイズやトリミングなどの基本的な処理を行う [[Python]] の画像処理ライブラリです。Pythonには画像認識などの高度な画像処理を行う OpenCV というライブラリもありますが、NumPy との連携(画像をNumPyの配列ndarrayとして読み込む)により、画素値ごとの算術演算が可能になります。
~


***Pillowのインストールとインポート
Python 言語のライブラリとしてのインストールになるので、一般の Python3 の環境であれば、Terminalから以下のコマンドでインストールできます。
 $ pip3 install pillow

import する際は、以下のように記述するのが一般的です。
 from PIL import Image
&small(開発が停止しているPIL(Python Image Library)からフォークされたライブラリで、import する際は、pillow ではなく 従来どおり PIL と記述します。);

''Google Colaboratory では'' Jupyter Notebook で利用できるライブラリーが「すべてインストール済み」という前提なので、ローカル環境での作業のように、必要なライブラリのインストールを行う必要はなく、コードセルに import 文を書くだけで使うことができます。

~
~

**画像処理

***画像の読み込みと画像情報の取得

-画像読み込み
 from PIL import Image, ImageFilter
 img = Image.open('path/to/xxxxx.png')

-フォーマット、サイズ(幅、高さ)、モードなどのメタ情報の取得。
 print(img.format, img.size, img.mode)
 # PNG (800, 600) RGB

-指定した座標の色を取得(座標の原点(0, 0)は左上です)。
(R, G, B)のタプルが返されます。
 print(img.getpixel((256, 256)))
 # (180, 65, 72)

~

***画像処理
-以下、シンプルな変換処理を連続で行う事例です。
new_img2 = img.convert('L').rotate(90).filter(ImageFilter.GaussianBlur())
--convert('L'):グレースケールに変換
--rotate(90) :90度回転
--filter(ImageFilter.GaussianBlur()) :ガウスぼかし

-ネガポジ反転
ImageOps が必要です。
 from PIL import Image, ImageOps
 
 img = Image.open(''path/to/xxxxx.jpg'')
 img_invert = ImageOps.invert( img )
~

***画像の表示と保存

-画像の表示(OSデフォルトのアプリケーションで画像が表示されます)。
 img.show()

-画像の保存
ファイル形式は save() の引数に指定した拡張子から自動判別されます。
 img.save('path/to/xxxx.jpg', quality=95)
~
~

**図形描画

***画像の生成
-Image.new で モード、サイズ、色指定(単色ベタ画像が生成されます)。
 from PIL import Image, ImageDraw, ImageFont
 img = Image.new("RGB", (512, 512), (255, 255, 255) )
~

***描画
-ImageDraw.Draw に画像オブジェクトを渡して描画用のオブジェクトを生成。
 draw = ImageDraw.Draw(img)

-テキストの描画
 font = ImageFont.truetype( '/path/to/Fonts/xxxxxx.otf' , 36 )
 draw.multiline_text( (0, 0), 'Hello Pillow!', fill=(0, 0, 0) , font=font )


-直線、長方形、楕円の描画
 draw.line( (0, img.height, img.width, 0) , fill=(0, 0, 255), width=4 )
 draw.rectangle( (100, 100, 200, 200) , fill=(0, 255, 0) )
 draw.ellipse( (200, 200, 300, 200) , fill=(255, 0, 0) )
~

***画像の表示と保存

-画像の表示(OSデフォルトのアプリケーションで画像が表示されます)。
 img.show()

-画像の保存
ファイル形式は save() の引数に指定した拡張子から自動判別されます。
 img.save('path/to/xxxx.jpg', quality=95)
~
~

**サンプルプログラム
画像を読み込んで2値化するプログラムです。

-GitHub:[[ImageProcessing.ipynb>https://github.com/koichi-inoue/JupyterNotebook/blob/master/ImageProcessing.ipynb]]
-nbviewer:[[ImageProcessing.ipynb>https://nbviewer.jupyter.org/github/koichi-inoue/JupyterNotebook/blob/master/ImageProcessing.ipynb]]

~

***公式リファレンス
詳細:https://pillow.readthedocs.io/en/stable/reference/index.html

~
~