opencv模板匹配函数matchtemplate详解

  • Post category:other

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()

这将在源图像中查找模板图像,并在指定区域内进行匹配。