PythonとOpenCVを用いて画像内に含まれる物体の輪郭抽出を行う方法を紹介します。この技術は、画像処理の分野で非常に重要な役割を果たします。
輪郭抽出の手順
輪郭抽出は以下の手順で行います:
- ターゲット画像読み込み
- グレースケールに変換
- 2値 (白黒)画像に変換
- OpenCVの
findContours
関数を用いて輪郭抽出 - 結果の描画・表示
輪郭抽出を行っているのは OpenCVのfindContours
関数です。この関数の主な用途は以下の通りです:
- 輪郭抽出
- 画像内の物体の数を数える
- 画像内の物体抽出 (物体検知用の学習データ作成に向けたのアノテーション)
ノイズ対策
輪郭抽出をするだけでは、細かいノイズ (の輪郭)が乗ってしまうのでその対策をします。使用する関数は、輪郭の面積を取得できる cv2.contourArea()
です。
contours = list(filter(lambda x: cv2.contourArea(x) > 1000, contours))
このコードを追加することで、指定したサイズ以上の輪郭のみ抽出できます。
まとめ
OpenCVのcv2.findContours()
関数を用いることで画像内の輪郭抽出ができます。上手く輪郭抽出するには、ノイズ対策や適切な閾値の設定など、いくつかのポイントがあります。画像処理を考えた際に必要になることが多いとと思いますので、活用できるようになることをお勧めします。