- 画像とテンプレートの読み込み: まず、画像とテンプレートを読み込みます。例えば、以下のコードで行うことができます。
import cv2
# 画像の読み込み
image = cv2.imread('image.jpg')
# テンプレートの読み込み
template = cv2.imread('template.jpg')
- マッチングテンプレートの実行: 次に、matchTemplate()関数を使用して、テンプレートマッチングを実行します。以下に、基本的な使い方の例を示します。
import cv2
import numpy as np
# 画像とテンプレートの読み込み
image = cv2.imread('image.jpg')
template = cv2.imread('template.jpg')
# テンプレートマッチングの実行
result = cv2.matchTemplate(image, template, cv2.TM_CCOEFF_NORMED)
# マッチング結果の取得
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)
# テンプレートがマッチした位置を矩形で囲む
top_left = max_loc
bottom_right = (top_left[0] + template.shape[1], top_left[1] + template.shape[0])
cv2.rectangle(image, top_left, bottom_right, (0, 255, 0), 2)
# 結果の表示
cv2.imshow('Matches', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
- マッチング結果の解析と処理: マッチング結果を解析し、必要に応じて処理を行うこともできます。例えば、類似度の閾値を設定し、一定以上のマッチングスコアを持つ領域のみを検出したり、複数のマッチング結果を取得したりすることができます。
import cv2
import numpy as np
# 画像とテンプレートの読み込み
image = cv2.imread('image.jpg')
template = cv2.imread('template.jpg')
# テンプレートマッチングの実行
result = cv2.matchTemplate(image, template, cv2.TM_CCOEFF_NORMED)
# 類似度の閾値を設定
threshold = 0.8
# マッチング結果の解析
locations = np.where(result >= threshold)
locations = list(zip(*locations[::-1]))
# テンプレートがマッチした位置を矩形で囲む
for loc in locations:
top_left = loc
bottom_right = (top_left[0] + template.shape[1], top_left[1] + template.shape[0])
cv2.rectangle(image, top_left, bottom_right, (0, 255, 0), 2)
# 結果の表示
cv2.imshow('Matches', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
以上が、PythonのOpenCVを使用してマッチングテンプレートを実行するための基本的な手順とコード例です。これらの例を参考にして、自分のプロジェクトに応じたカスタマイイズドなコードを作成してください。また、テンプレートマッチングに関する詳細な情報は、OpenCVの公式ドキュメントやオンラインのチュートリアルを参照することをおすすめします。