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ドキュメンテーションを参照してください。