推荐答案
// www.javascriptcn.com code example
import cv2
import numpy as np
# 加载图像和模板
img = cv2.imread('image.jpg', 0)
template = cv2.imread('template.jpg', 0)
# 获取模板的尺寸
w, h = template.shape[::-1]
# 使用 matchTemplate 函数进行模板匹配
res = cv2.matchTemplate(img, template, cv2.TM_CCOEFF_NORMED)
# 设定匹配阈值
threshold = 0.8
# 找到匹配结果中大于阈值的位置
loc = np.where(res >= threshold)
# 在图像上绘制矩形框标记匹配区域
for pt in zip(*loc[::-1]):
cv2.rectangle(img, pt, (pt[0] + w, pt[1] + h), (0, 255, 0), 2)
# 显示结果
cv2.imshow('Matched', img)
cv2.waitKey(0)
cv2.destroyAllWindows()本题详细解读
1. matchTemplate 函数的作用
matchTemplate 是 OpenCV 中用于模板匹配的函数。它通过滑动模板图像在输入图像上进行比较,计算每个位置的相似度,并返回一个结果矩阵。这个结果矩阵中的每个值表示输入图像中对应位置与模板的匹配程度。
2. 参数解析
img: 输入图像,通常是灰度图像。template: 模板图像,通常是灰度图像。method: 匹配方法,常用的有cv2.TM_CCOEFF_NORMED、cv2.TM_SQDIFF等。
3. 匹配方法
cv2.TM_CCOEFF_NORMED: 归一化相关系数匹配法,值越大表示匹配程度越高。cv2.TM_SQDIFF: 平方差匹配法,值越小表示匹配程度越高。
4. 结果处理
res: 匹配结果矩阵,每个值表示输入图像中对应位置与模板的匹配程度。threshold: 设定一个阈值,筛选出匹配程度高于该阈值的位置。loc: 使用np.where函数找到匹配结果中大于阈值的位置。
5. 绘制匹配区域
- 使用
cv2.rectangle函数在输入图像上绘制矩形框,标记出匹配区域。
6. 显示结果
- 使用
cv2.imshow显示匹配结果,并通过cv2.waitKey和cv2.destroyAllWindows控制窗口显示和关闭。