OpenCV 5.0.0
Open Source Computer Vision
読み込み中...
検索中...
見つかりません
🤖 AIによる機械翻訳(非公式) — これは OpenCV 5.0.0 公式リファレンス(英語)を AI (Claude) で自動翻訳したものです。訳に誤りを含む場合があります。正確な情報は 公式英語版(原文) を参照してください。
テンプレートマッチング

目標

理論

テンプレートマッチングは、より大きな画像の中でテンプレート画像の位置を探索して見つけるための手法である。OpenCV にはこの目的のための関数 cv.matchTemplate() が用意されている。この関数はテンプレート画像を入力画像上で(2次元の畳み込みと同様に)スライドさせ、テンプレート画像と、その下にある入力画像のパッチとを比較する。OpenCV にはいくつかの比較手法が実装されている(詳細はドキュメントを参照)。戻り値はグレースケール画像であり、各ピクセルはそのピクセルの近傍がテンプレートとどれだけマッチするかを表す。

入力画像のサイズが (WxH)、テンプレート画像のサイズが (wxh) であれば、出力画像のサイズは (W-w+1, H-h+1) となる。結果が得られたら、cv.minMaxLoc() 関数を使って最大値・最小値の位置を見つけられる。その位置を矩形の左上隅とし、(w,h) を矩形の幅と高さとする。その矩形がテンプレートの領域となる。

覚え書き
比較手法として cv.TM_SQDIFF を使う場合は、最小値が最良のマッチを与える。

OpenCVにおけるテンプレートマッチング

次の関数を使用する: cv.matchTemplate (image, templ, result, method, mask = new cv.Mat())

引数
image探索を実行する画像。8ビットまたは32ビット浮動小数点である必要がある。
templ探索するテンプレート。元画像より大きくてはならず、同じデータ型である必要がある。
result比較結果のマップ。シングルチャンネルの32ビット浮動小数点である必要がある。
method比較手法を指定する引数(cv.TemplateMatchModes を参照)。
mask探索するテンプレートのマスク。templ と同じデータ型・同じサイズである必要がある。デフォルトでは設定されない。

試してみる