Pillowライブラリを使って画像のエッジ(輪郭)を検出する方法
この記事では、Pythonの画像処理ライブラリ「Pillow」を使用して、画像内のエッジ(輪郭線)を検出する方法を解説します。エッジ検出は、画像認識や画像解析の前処理として広く活用されている基本的なテクニックです。
Pillowでは、ImageFilterクラスに用意されているFIND_EDGESフィルタを使うことで、わずか数行のコードで画像のエッジを抽出できます。
元画像
以下が処理対象となる元の画像です。

アルゴリズムの手順
ステップ1: PillowからImageとImageFilterをインポートする ステップ2: 対象の画像を開く ステップ3: filter関数を呼び出し、FIND_EDGESフィルタを指定する ステップ4: 処理結果の画像を表示する
サンプルコード
from PIL import Image, ImageFilter
im = Image.open('testimage.jpg')
im = im.filter(ImageFilter.FIND_EDGES)
im.show()コードの解説
- 1行目:
PILモジュールからImageクラスとImageFilterクラスをインポートします。 - 3行目:
Image.open()メソッドで、エッジ検出を行いたい画像ファイルを読み込みます。 - 4行目:
filter()メソッドにImageFilter.FIND_EDGESを渡すことで、画像全体の輪郭部分だけが強調された新しい画像オブジェクトが生成されます。 - 5行目:
show()メソッドで、処理後の画像をデフォルトのビューアで表示します。
実行結果
FIND_EDGESフィルタを適用すると、以下のように画像の明暗が大きく変化する境界部分(エッジ)のみが抽出され、背景は黒く表示されます。

まとめ
PillowのImageFilter.FIND_EDGESを使えば、複雑な数式やOpenCVなどの追加ライブラリを必要とせず、シンプルなコードで画像のエッジ検出を実現できます。物体の輪郭抽出や特徴量の可視化など、さまざまな用途に応用できるので、ぜひ試してみてください。
-
Pythonで理解する畳み込みニューラルネットワーク(CNN)の基礎とSobelフィルタによるエッジ検出
画像認識はかつて、線形回帰や類似度の比較といった、より単純な手法によって行われていました。その結果は決して良いものではなく、手書き文字のアルファベットを認識するという単純なタスクさえ困難でした。畳み込みニューラルネットワーク(CNN)は、人間が画像を知覚する際の脳の神経活動を緩やかに模倣する、計算コストの低い手法を提供することで、従来のアプローチから一歩進んだ存在となっています。畳み込みニューラルネットワーク(CNN)の概要人間がさまざまな物体を認識できるようになる過程と非常に似ていて、コンピュータのアルゴリズムも、入力を汎化し、初めて見る画像に対して判断を下せるようになるまでに、何百万もの画
-
OpenCVを使って画像・動画のエッジを検出するPythonプログラムの書き方
この記事では、Pythonを使って画像や動画ファイルからエッジ(輪郭)を検出する方法を解説します。エッジ検出には、コンピュータビジョン向けに設計されたオープンソースライブラリ「OpenCV」を使用します。OpenCVはもともとIntelによって開発されたライブラリで、BSDライセンスのもとで無料で利用できます。OpenCVの機能を使うには、pipでインストールを行います。インストール時にNumPyモジュールも自動的にダウンロードされるため、別途用意する必要はありません。sudo pip3 install opencv-python今回の入力には動画ファイルを使用しますが、Webカメラを接続すれ