こんな方におすすめ
- Pythonで画像を取り込みたい
- Pythonでぼかしやエッジ検出の画像処理をしたい!
Pythonでの画像処理について説明します。この記事を読むことで、Pythonで写真を取り込んだり、画像処理をする方法を理解できると思います。今回は、基本的なフィルタ処理を行います。
実際に、使ったソースコードも全部公開しますので、参考にしてトライしてみて下さい。
画像処理の内容
今回、取り扱う画像処理は以下の項目です。こんな事も簡単にできるんだと感じてもらえればと思います。
- 画像をグレイススケールにする処理
- ガウシアンぼかしフィルタ処理
- ソーベルフィルタ処理によるエッジ検出
- 手書き風効果
【世界で5万人が受講】実践 Python データサイエンス・オンライン講座
プログラムの内容
今回、Jupyterーnotebookを使用しています。
まずは、必要なモジュールをインポートします。scikit-imageはPytonの画像処理に置ける主要パッケージの一つです。画像は行と列のビットが並んでいるものだと考えると、numpyが必要な理由もなんとなくわかると思います。
1 2 3 4 5 6 7 |
import numpy as np import matplotlib.pyplot as plt import skim age import skimage.filters as skif import skimage.data as skid from PIL import Image %matplotlib inline |
グレイスケール画像を表示するための関数を定義します。画像処理後にこの関数を使って画像を表示させて行きます。
1 2 3 4 |
def show(img): plt.imshow(img, cmap=plt.cm.gray) plt.axis('off') plt.show() |
画像処理を行う、画像を読み込みます。FILE_PATHは、画像をおいたPATHを指定します。今回はプログラム動作したカレントディレクトなので、写真のファイル名を入れています。
1 2 3 4 |
FILE_PATH = 'model2.jpg' IMG_SIZE = 1000 img = Image.open(FILE_PATH) show(img) |
次にこの画像をグレイスケールに変換します。グレイスケールとして扱うために、RGB要素を一つだけ使用します。
1 2 3 |
img = img.convert("RGB") img_g = skimage.img_as_float(img)[...,0] show(img_g) |
次に、この画像にガウシアンぼかしフィルタを適用させて見ます。
1 |
show(skif.gaussian_filter(img_g,5.)) |
次にソベールフィルタを通して、画像のエッジを検出します。
1 2 |
sobimg = skif.sobel(img_g) show(sobimg) |
最後に手書き風の効果を出します。適正なエッジの閾値を見つけるために、ウィジェットを使って、操作しながら見つけてください。
1 2 3 4 |
from IPython.html import widgets @widgets.interact(x=(0.005, .3, .01)) def edge(x): show(sobimg<x) |
Python 3 入門+アメリカのシリコンバレー流コードスタイル
まとめ
Pythonの画像処理で、簡単に手書き風の効果まで行うことができました。
画像にぼかしを入れたいときなど、ちょこっと加工するのにも、非常に便利です。紹介したこと以外にも、いろんなことができます。ぜひ、トライして見てください!