「プログラムで画像を加工する方法を探している」
「Python初心者が画像処理をするときに使いやすいライブラリを知りたい」
「画像を加工する処理は初心者の自分には難解な手順を踏まないと対応できないと思っている」
本日はそんな方に向けてPythonで画像処理をする方法をお話していきます。
Pythonにおける画像処理は、様々なアプリケーションで重要な役割を果たしています。
特に画像のトリミング、反転、そして埋め込みといった操作は、多くのプロジェクトで必要不可欠です。
Pythonの画像処理ライブラリであるPillowを使用すれば、これらのタスクを効率的かつ簡単に実装することができます。
この記事ではPillowを使用してPythonで画像をトリミング、反転、そして埋め込む方法について詳しく解説していきます。
また動画もあるので必要に応じて活用してください。
PythonのPillowを使って画像処理、加工を行う方法
まずはPillowという外部ライブラリをインストールします。
pip install Pillow
インストールが完了したらインポート文を書きます。
from PIL import Image
画像は作業ディレクトリに保存したら、PillowのImageクラスのopenメソッドというものを使って以下のように書くことで読み込みが完了します。
from PIL import Image
# ここを追加
image = Image.open("/content/sample.jpeg")
print(image)
Image.openによって画像の読み込みができて画像についての情報をプロパティで管理してくれます。
例えば以下のようにプロパティを指定して特定の情報を取得することが可能です。
from PIL import Image
image = Image.open("/content/sample.jpeg")
# ここを追加
print(image.format) # 拡張子を表示 JPEG
print(image.mode) # ピクセル形式を表示 RGB
print(image.size) # 画像のサイズを表示(2400,1303)
PythonのPillowを使って画像のトリミング、サイズ変更、グレースケールをする方法
まずは画像のトリミングをやってみます。
トリミングするには開始点(x1,y1)と終了点(x2,y2)で座標を指定します。
その座標をcropメソッドの引数に入れることで指定された座標の範囲を切り抜きます。
また加工された画像はsaveメソッドで名前をつけて保存します。
from PIL import Image
image = Image.open("/content/sample.jpeg")
rect = (100,100,200,200)
rect_image = image.crop(rect)
rect_image.save("/content/sample2.png")
元の画像は以下です。
上記コードではx=100,y=100を開始点、x=200,y=200を修了点にした、画像の左上部分のあたりを切り抜いています。
またトリミングする前に画像自体の大きさを変えたい場合にはresizeメソッドが使えます。
元の画像に対して横幅と縦幅の値をタプル型にして指定します。
from PIL import Image
image = Image.open("/content/sample.jpeg")
new_image = image.resize((400,400))
new_image.save("/content/sample1.jpeg")
上記コードでは400×400にリサイズするようにしました。
また画像自体の色をグレースケールにしたい場合にはconvertメソッドというメソッドの引数に文字列で「L」を指定するとグレースケールの画像に変換してくれます。
from PIL import Image
image = Image.open("/content/sample.jpeg")
grey_image = image.convert("L")
grey_image.save("/content/sample3.png")
一般的にはトリミングの使用頻度が多いのですが、トリミングする前に画像自体の大きさを変えたりモノクロに変えたりなどもあります。
付随する作業と一緒に練習していきましょう。
PythonのPillowを使って画像の回転、反転をする方法
続いて画像の回転、反転をする方法を紹介します。
画像の回転にはrotateというメソッドがあり引数に角度を数字で指定します。
プラスの数字だと反時計回りになり、マイナスの数字だと時計回りになります。
from PIL import Image
image = Image.open("/content/sample.jpeg")
image1 = image.rotate(30)
image1.save("/content/sample1.jpeg")
ただし回転させると四角が見切れる形になります。
それを回避するにはrotateメソッドの第二引数にexpand=Trueを入れることで、全体を縮小した上で回転させることができます。
from PIL import Image
image = Image.open("/content/sample.jpeg")
# ここを変更
image2 = image.rotate(30, expand=True)
image2.save("/content/sample2.jpeg")
また回転とは別で画像を左右反転、上下反転させることもできます。
transposeメソッドというものにImageクラスのFLIP_LEFT_RIGHTプロパティを指定することで左右反転になります。
from PIL import Image
image = Image.open("/content/sample.jpeg")
image3 = image.transpose(Image.FLIP_LEFT_RIGHT)
image3.save("/content/sample3.jpeg")
元の画像が以下です。
上記のコードを実行した結果が以下になります。
上下反転させるにはtransposeメソッドの引数にImageクラスのFLIP_TOP_BOTTOMプロパティを指定します。
from PIL import Image
image = Image.open("/content/sample.jpeg")
# ここを変更
image4 = image.transpose(Image.FLIP_TOP_BOTTOM)
image4.save("/content/sample4.jpeg")
PythonのPillowを使って画像に文字や別の画像を埋め込む方法
続いて画像に文字や別の画像を埋め込む方法を紹介します。
埋め込みにはImageクラスの他にImageDrawというクラスもインポートしておきます。
from PIL import Image, ImageDraw
image = Image.open("/content/sample.jpeg")
画像を一度ImageDrawクラスのDrawメソッドの引数に入れます。
その後にtextメソッドというメソッドの第一引数に埋め込み位置の座標、埋め込む文字、埋め込む文字色を指定します。
埋め込む位置の座標は前章でやっていたようにタプル型にしてxとyを指定します。
from PIL import Image, ImageDraw
image = Image.open("/content/sample.jpeg")
# ここを追加
draw = ImageDraw.Draw(image)
draw.text((100,100), "test", "red")
image.save("/content/sample1.jpeg")
元の画像が以下のような画像です。
上記コードではx=100,y=100の左上あたりの部分に赤色で「test」という文字を埋め込みました。
また文字ではなく画像を埋め込む場合にはpasteというメソッドになります。
埋め込む画像は別で用意してTwitterという変数にしています。
from PIL import Image, ImageDraw
image = Image.open("/content/sample.jpeg")
# ここを変更
twitter = Image.open("/content/twitter.png")
image.paste(twitter, (200,200), twitter)
image.save("/content/sample2.jpeg")
画像処理のパターンをPillowというライブラリを使って紹介しましたが、Pythonでは他にもたくさんのライブラリがあります。
もっと高度なこともできますので興味のある方は調べてみてください。