我想检查模板匹配是True还是False。
就像这样:
import cv2 as cvimport numpy as npfrom matplotlib import pyplot as pltimg = cv.imread('messi5.jpg',0)img2 = img.copy() template = cv.imread('template.jpg',0)w, h = template.shape[::-1]methods = ['cv.TM_CCOEFF', 'cv.TM_CCOEFF_NORMED', 'cv.TM_CCORR', 'cv.TM_CCORR_NORMED', 'cv.TM_SQDIFF', 'cv.TM_SQDIFF_NORMED']for meth in methods: img = img2.copy() method = eval(meth) res = cv.matchTemplate(img,template,method) min_val, max_val, min_loc, max_loc = cv.minMaxLoc(res) if template_match: //do something
我读过这个但我不明白 https://docs.opencv.org/master/d4/dc6/tutorial_py_template_matching.html
感谢回答。
回答:
- 获取模板的特征。
-
图像的特征,如边缘和兴趣点,为图像内容提供了丰富的信息。 来源
-
例如:如果下面是你的模板,那么找出它的特征。
import numpy as np import imutils import glob import cv2 template = cv2.imread("template.jpg") template = cv2.cvtColor(template, cv2.COLOR_BGR2GRAY) template = cv2.Canny(template, 50, 200) (h, w) = template.shape[:2]
- 获取图像的特征。
- 检查模板特征是否与图像特征匹配。
result = cv2.matchTemplate(edged, template, cv2.TM_CCOEFF)
cv2.TM_CCOEFF
只是一个选项,你可以使用许多其他 模板
- 查找
result
变量的最小值和最大值
(_, maxVal, _, maxLoc) = cv2.minMaxLoc(result)
- 现在,你可以检查模板匹配是True还是False。
found = (maxVal, maxLoc, r)
因此,如果检测到模板,found
变量将返回一个长度为3的元组,这意味着模板匹配成功。例如:
(495.000, (148, 26), 1)
-
495.000是数组中的最大值。
-
(148, 26)是找到对象的起始
(x, y)
坐标。 -
1.0是半径。