\

PythonとOpenCVを使用して画像から輪郭を検出する方法について説明します。具体的には、OpenCVの findContours 関数を使用して2値画像から輪郭を抽出します。

まず、cv2.findContours 関数の基本的な使用方法を見てみましょう。

contours, hierarchy = cv2.findContours(image, mode, method)

ここで、
image は入力画像(8ビット、1チャンネル)。非0の画素は1とした2値画像として扱われます。
mode は輪郭を検索する方法を指定します。
method は輪郭を近似する方法を指定します。

この関数は、抽出された輪郭のリスト contours と階層構造のリスト hierarchy を返します。

次に、実際に画像から輪郭を抽出する手順を見てみましょう。

import cv2

# 画像を読み込む
img = cv2.imread("sample.jpg")

# グレースケールに変換する
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 2値化する
ret, bin_img = cv2.threshold(gray, 20, 255, cv2.THRESH_BINARY)

# 輪郭を抽出する
contours, hierarchy = cv2.findContours(bin_img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

# 小さい輪郭は誤検出として削除する
contours = list(filter(lambda x: cv2.contourArea(x) > 100, contours))

# 輪郭を描画する
cv2.drawContours(img, contours, -1, color=(0, 0, 255), thickness=2)

このコードは、画像を読み込み、グレースケールに変換し、2値化した後で輪郭を抽出します。そして、面積が一定以下の小さい輪郭を削除し、残った輪郭を画像に描画します。

以上がPythonとOpenCVを使用した基本的な輪郭検出の方法です。詳細な情報や他の機能については、公式のOpenCVドキュメンテーションを参照してください。

投稿者 admin

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です