OpenCV-Pythonテンプレートが人の目に合う例


テンプレートマッチングとは?
テンプレートマッチングとは、現在の画像A内で画像Bと最も似ている部分を探して、輪作を理解することができるが、ここでは同じ情報を見つけることである。
一般的に、画像Aを入力画像と呼び、画像Bをテンプレート画像と呼ぶ。テンプレートマッチングの原理は、テンプレートB画像を画像A上に遍歴して、そのマッチング部分を見つけることです。
テンプレートマッチング関数
OpenCVでは,パターンマッチングを完了するためにcv 2.match Template関数を提供してくれた。その関数の完全な定義は以下の通りです。

def matchTemplate(image, templ, method, result=None, mask=None):
イメージ:オリジナル画像
templ:テンプレート画像
method:マッチング方法。このパラメータはTemplateMatch Modesにより実現され、下表のようになります。
パラメータ
値を取る
意味
cv 2.TM_SQDIFF
0
分散をもとにしてマッチングします。完全に一致すれば、結果は0です。一致しないと大きな差があります。
cv 2.TM_SQDIFF_NORMED
1
標準(正規化)の二乗差マッチ
cv 2.TM_CCORR
2
このような方法はテンプレート画像を入力画像と乗算し、積が大きいほど整合度が高い。積が0なら、マッチング効果が最も悪いという意味です。
cv 2.TM_CCORR_NORMED
3
標準(正規化)関連マッチ
cv 2.TM_CCOEFF
4
このような方法は、テンプレート画像とその平均値との相対値を、入力画像とその平均値との相関値と整合させる。1は完璧なマッチングを表し、-1は悪いマッチングを表し、0は相関がないことを表します。(ランダムシーケンス)
cv 2.TM_CCOEFF_NORMED
5
標準(正規化)相関係数の整合
レスリング:戻り値。各位置の比較結果を組み合わせて構成される結果セットであり、タイプは単一チャネル32ビット浮動小数点型である。入力画像サイズがWHであり、テンプレートサイズがwhである場合、戻り値の大きさは(W−w+1)*(H−h+1)である。
mask:テンプレート画像マスク。テンプレート画像と同じ種類のサイズが必要です。通常は標準の値を使用すればいいです。
テンプレートマッチングを実現
まず、私達は2枚の写真が必要です。ここではいつも使う美人の写真を選んで、その目の部分を切り取ってテンプレートの画像としています。

import cv2
import matplotlib.pyplot as plt

img = cv2.imread("4.jpg", 0)
template = cv2.imread("4_1.jpg", 0)

th, tw = template.shape[::]

rv = cv2.matchTemplate(img, template, cv2.TM_SQDIFF)
min, max, minLoc, maxLoc = cv2.minMaxLoc(rv)

topLeft = minLoc
bottomRight = (topLeft[0] + tw, topLeft[1] + th)
cv2.rectangle(img, topLeft, bottomRight, 255, 2)

plt.subplot(121)
plt.imshow(template, cmap="gray")
plt.axis('off')
plt.subplot(122)
plt.imshow(img, cmap="gray")
plt.axis('off')
plt.show()
運転後の効果は以下の通りです。
效果
付録:
テンプレート
模板图
原図
原图
ここで、OpenCV-Pythonテンプレートが人の目に合った例についての記事を紹介します。OpenCVテンプレートのマッチング内容については、以前の文章を検索したり、下記の関連記事を見たりしてください。これからもよろしくお願いします。