#author("2023-11-23T16:36:14+09:00;2021-08-06T17:33:09+09:00","default:inoue.ko","inoue.ko") #author("2023-11-23T16:37:03+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) ~ ***サンプルプログラム 画像を読み込んで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]] ~ ~ **図形描画 以下、PILの画像・描画オブジェクトと、IPython.displayの表示機能を使って、画面上に図形を描くプロセスの事例です。 #ライブラリの読み込み from IPython.display import display from PIL import Image, ImageDraw, ImageFont # 画像オブジェクトの生成(色モード、画像サイズ、背景色を指定) img = Image.new("RGB", (500, 500), (255, 255, 255) ) # 描画オブジェクトの生成 draw = ImageDraw.Draw( img ) # 直線、長方形、楕円の描画例 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) ) draw.ellipse( (300, 300, 400, 400) , fill=(255, 0, 0) ) # 画面に出力 display(img) ~ ***サンプルプログラム 500 x 500 のキャンバスに、線・矩形・楕円を描くサンプルです。 -GitHub:[[Graphics.ipynb>https://github.com/koichi-inoue/JupyterNotebook/blob/master/Graphics.ipynb]] ~ ~ ***公式リファレンス 詳細:https://pillow.readthedocs.io/en/stable/reference/index.html ~ ~