python实现matchTemplate
时间: 2023-05-25 14:06:07 浏览: 145
matchTemplate是OpenCV中用于模板匹配的函数,可以在图像中找到与给定模板最相似的区域。
下面是一个基本的使用示例:
```
import cv2
# 读取原始图像和模板
img = cv2.imread('img.png', cv2.IMREAD_GRAYSCALE)
template = cv2.imread('template.png', cv2.IMREAD_GRAYSCALE)
# 获取模板的尺寸
w, h = template.shape[::-1]
# 进行模板匹配
res = cv2.matchTemplate(img, template, cv2.TM_CCOEFF_NORMED)
# 取得最大匹配位置
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)
# 在原始图像中画出匹配矩形
top_left = max_loc
bottom_right = (top_left[0] + w, top_left[1] + h)
cv2.rectangle(img, top_left, bottom_right, (0, 255, 0), 2)
# 展示结果
cv2.imshow('Result', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在这个例子中,我们读取了原始图像和模板,并使用matchTemplate函数进行模板匹配。matchTemplate函数接受三个参数:原始图像、模板和一个匹配方法。匹配方法指定了使用哪种算法进行匹配,包括:
- TM_SQDIFF:平方差匹配法。
- TM_SQDIFF_NORMED:归一化平方差匹配法。
- TM_CCORR:相关匹配法。
- TM_CCORR_NORMED:归一化相关匹配法。
- TM_CCOEFF:相关系数匹配法。
- TM_CCOEFF_NORMED:归一化相关系数匹配法。
在本例中,我们选择了归一化相关系数匹配法(cv2.TM_CCOEFF_NORMED),它返回的结果值在0到1之间,值越大表示匹配程度越高。
使用minMaxLoc函数取得返回值中的最大值位置,即为最佳匹配位置。然后,我们使用cv2.rectangle函数在原始图像中画出匹配矩形。
在实际应用中,要根据实际情况选择合适的匹配方法,并使用适当的预处理方法对图像进行增强。
阅读全文