Pillow(PIL)
前回、Pythonのreモジュールでよく使う関数を紹介しました。
今回はPythonの画像ライブラリであるPillow(PIL)を使って画像に色々なフィルターをかけてみましょう。
今回はこちらの蓮の花の画像を使用します(ファイル名「lotus.png」)。
今回、Pillowのフィルターを使うためには、「Image」と合わせて、「ImageFilter」をインポートします。
from PIL import Image, ImageFilter
そしてImageFilterを使う際には、このようにします。
img.filter(ImageFilter.フィルター名)
それでは始めていきましょう。
エッジ検出:FIND_EDGES
エッジ検出をするには「FIND_EDGES」を用います。
from PIL import Image, ImageFilter
img = Image.open("lotus.jpg")
filtered = img.filter(ImageFilter.FIND_EDGES)
filtered.show()
実行結果
オリジナル画像
FIND_EDGES
こんな感じで画像のエッジを取得することができます。
ただ通常エッジ検出ではグレースケール(もしくはモノクロ)なんですが、この画像ではカラーになっています。
そのため、グレースケールにしたい場合は先にグレースケールに変換したのち、エッジ検出を行います。
グレースケールに変更するには「.convert(“L”)」で画像を変換します。
from PIL import Image, ImageFilter
img = Image.open("lotus.jpg")
img_gray = img.convert("L")
filtered = img_gray.filter(ImageFilter.FIND_EDGES)
filtered.show()
実行結果
オリジナル画像
FIND_EDGES
エッジ検出+白黒反転:CONTOUR
フィルターに「CONTOUR」を使用すると、エッジ検出をして、白黒反転させたような画像が得られます。
from PIL import Image, ImageFilter
img = Image.open("lotus.jpg")
filtered = img.filter(ImageFilter.CONTOUR)
filtered.show()
実行結果
オリジナル画像
COUNTOUR
白黒以外の色はそのまま残るようなので、こちらもグレースケールにしてから「CONTOUR」フィルタをかけるとグレースケールの輪郭が得られます。
from PIL import Image, ImageFilter
img = Image.open("lotus.jpg")
img_gray = img.convert("L")
filtered = img_gray.filter(ImageFilter.CONTOUR)
filtered.show()
実行結果
オリジナル画像
COUNTOUR
ぼかし:BLUR
画像全体にぼかしをいれるには「BLUR」を用います。
from PIL import Image, ImageFilter
img = Image.open("lotus.jpg")
filtered = img.filter(ImageFilter.BLUR)
filtered.show()
実行結果
オリジナル画像
BLUR
詳細化:DETAIL
「DETAIL」を使うと、画像がより鮮明になります。
from PIL import Image, ImageFilter
img = Image.open("lotus.jpg")
filtered = img.filter(ImageFilter.DETAIL)
filtered.show()
実行結果
オリジナル画像
DETAIL
エッジを際立たせる:EDGE_ENHANCED、EDGE_ENHANCED_MORE
エッジを際立たせるには「EDGE_ENHANCED」を、さらに際立たせるには「EDGE_ENHANCED_MORE」を使います。
from PIL import Image, ImageFilter
img = Image.open("lotus.jpg")
filtered = img.filter(ImageFilter.EDGE_ENHANCE)
filtered.show()
実行結果
オリジナル画像
EDGE_ENHANCE
from PIL import Image, ImageFilter
img = Image.open("lotus.jpg")
filtered = img.filter(ImageFilter.EDGE_ENHANCE_MORE)
filtered.show()
実行結果
オリジナル画像
EDGE_ENHANCE_MORE
エンボス:EMBOSS
エンボス加工のように凹凸のように見える画像にするには「EMBOSS」を使います。
from PIL import Image, ImageFilter
img = Image.open("lotus.jpg")
filtered = img.filter(ImageFilter.EMBOSS)
filtered.show()
実行結果
オリジナル画像
ENBOSS
シャープにする:SHARPEN
「SHARPEN」を使うと画像をシャープにできます。
from PIL import Image, ImageFilter
img = Image.open("lotus.jpg")
filtered = img.filter(ImageFilter.SHARPEN)
filtered.show()
実行結果
オリジナル画像
SHARPEN
なめらかにする:SMOOTH、SMOOTH_MORE
画像をなめらかにするには「SMOOTH」を、さらになめらかにするには「SMOOTH_MORE」を用います。
from PIL import Image, ImageFilter
img = Image.open("lotus.jpg")
filtered = img.filter(ImageFilter.SMOOTH)
filtered.show()
実行結果
オリジナル画像
SMOOTH
from PIL import Image, ImageFilter
img = Image.open("lotus.jpg")
filtered = img.filter(ImageFilter.SMOOTH_MORE)
filtered.show()
実行結果
オリジナル画像
SMOOTH
次回は他の画像処理ライブラリであるOpenCVで画像を読み込んでグレースケールにしてみます。
ではでは今回はこんな感じで。
コメント