OpenCV是一个流行的计算机视觉库,提供了许多图像处理和计算机视觉算法。其中之一是模板匹配,它可以在图像中查找特定的模式。在本攻略中,我们将介绍OpenCV中的模板匹配函数matchTemplate的详细信息。
matchTemplate函数
matchTemplate函数是OpenCV中用于模板匹配的函数。它采用两个参数:源图像和模板图像,并返回一个匹配结果图像。该函数将模板图像在源图像中滑动,并计算每个位置的匹配程度。匹配程度越高,结果图像中的像素值越大。
cv2.matchTemplate(image, templ, method[, result[, mask]])
其中,参数说明如下:
- image:源图像
- templ:模板图像
- method:匹配方法,包括cv2.TM_SQDIFF、cv2.TM_SQDIFF_NORMED、cv2.TM_CCORR、cv2.TM_CCORR_NORMED、cv2.TM_CCOEFF、cv2.TM_CCOEFF_NORMED
- result:匹配结果图像
- mask:掩码图像
示例1:基本模板匹配
import cv2
import numpy as np
# 读取源图像和模板图像
img = cv2.imread('source.jpg')
template = cv2.imread('template.jpg')
# 获取模板图像的宽度和高度
w, h = template.shape[:-1]
# 使用cv2.TM_CCOEFF_NORMED方法进行模板匹配
result = cv2.matchTemplate(img, template, cv2.TM_CCOEFF_NORMED)
# 获取匹配结果中最大值的位置
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)
# 在源图像中绘制矩形框
top_left = max_loc
bottom_right = (top_left[0] + w, top_left[1] + h)
cv2.rectangle(img, top_left, bottom_right, (0, 0, 255), 2)
# 显示结果图像
cv2.imshow('result', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
这将在源图像中查找模板图像,并在匹配位置绘制矩形框。
示例2:使用掩码进行模板匹配
import cv2
import numpy as np
# 读取源图像和模板图像
img = cv2.imread('source.jpg')
template = cv2.imread('template.jpg')
# 创建掩码图像
mask = np.zeros(img.shape[:-1], dtype=np.uint8)
mask[100:300, 100:300] = 255
# 使用cv2.TM_CCOEFF_NORMED方法进行模板匹配
result = cv2.matchTemplate(img, template, cv2.TM_CCOEFF_NORMED, mask=mask)
# 获取匹配结果中最大值的位置
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)
# 在源图像中绘制矩形框
top_left = max_loc
bottom_right = (top_left[0] + w, top_left[1] + h)
cv2.rectangle(img, top_left, bottom_right, (0, 0, 255), 2)
# 显示结果图像
cv2.imshow('result', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
这将在源图像中查找模板图像,并在指定区域内进行匹配。