python pillow 画像加工

Python

pillowは画像処理ライブラリで、画像の読み込み、保存、リサイズやトリミングといった基本的な操作から、合成やフィルター適用、テキストや図形の描画ができます
OpenCVのようにの高度な画像処理(顔検出や文字認識)はできませんが、単純な処理がシンプルコードで書くことができます
自分は、OpenCVで文字認識する前の事前準備として画像を加工する手段として使用しています

・環境

windows 11
pillow 11.0.0

・画像読み込み、表示、保存

ライブラリをインストールします

pip install Pillow

画像のパスを指定して、imgとして読み込みます

from PIL import Image

img_path = r"C:\Users\user\Documents\sample.jpg"
img = Image.open(img_path)

読み込んだ画像imgを表示します

img.show()

画像imgを保存します
引数にパス、ファイル名と、qualityで品質を指定できます
1から100までで、デフォルトは75で値が大きいほうが品質が良いくなり、ファイルサイズも大きくなります
公式ドキュメントでは95より大きい値は推奨されていません

img.save(r"C:\Users\user\Documents\sample_new.jpg", quality=95)

・画像の加工

画像を切り取ります(トリミング)
座標で指定します(トリミングする四角形の左上のX座標、Y座標、右下のX座標、Y座標)
画像の座標を知りたいときは、windowsの方は「ペイント」アプリを使ってマウスを画像に合わせると座標が表示されます

img_trim = img.crop((278, 128, 1168, 198))

加工例:免許証の読み取り部分切り抜き

この免許証の「氏名」の部分を切り抜きます

windowsの方はペイントアプリで、画像ファイルを開きます

左下に座標(ピクセル)が表示されます

切り抜きたい形(四角形)の左上と右下の座標をメモします

コードを書いていきます

from PIL import Image

img_path = r"C:\Users\user\Documents\license.jpg"
img = Image.open(img_path)

#座標を指定して切り抜き
img_box = img.crop((278, 128, 1168, 198))

#切り抜いた画像を表示
img_box.show()

#切り抜いた画像を保存
img_box.save(r"C:\Users\user\Documents\license_name.jpg", quality=95)

以下のような画像を作成できます

画像の中に取得したい情報がたくさんあると、最初から光学文字認識で文字を抽出しても、その後の処理が大変なので、取りたい部分だけの画像を作ると確実に文字認識できます
同じレイアウトの書類や画像があるならこの方法で指名や、住所だけをリストにして一括で文字認識できます

この後、pyocrを使って光学文字認識を行うことでテキストデータとして抽出することができます
次の記事をぜひ参考にご覧ください

その他の加工例

白黒のみの画像に加工

img_mono = img.convert('L')

画像の回転、回転角度を引数で指定

img_rotate = img.rotate(90)

他にもテキストを画像に書いたり、図形を描写することもできます
ここら辺は、画像加工ソフトでも簡単にできるので、そちらを使う方が多いと思います

ただ、大量のファイルに同じ処理をする必要があるときは、pillowを使うと効率的かもしれません

コメント