OpenCV模板匹配(匹配图片中对应元素)
模板匹配方法
模板是被查找目标的图像,查找模板在原始图像中的哪个位置的过程就叫模板匹配。OpenCV提供的matchTemplate()方法就是模板匹配方法,其语法如下:
result = cv2.matchTemplate(image, templ, method, mask)
参数说明:
- image:原始图像。
- templ:模板图像,尺寸必须小于或等于原始图像。
- method:匹配的方法,可用参数值如下表所示:
参数值 | 值 | 含义 |
---|---|---|
cv2.TM_SQDIFF | 0 | 差值平方和匹配,也叫平方差匹配。可以理解为差异程度。匹配程度越高,计算结果越小。完全匹配的结果为0 |
cv2.TM_SQDIFF_NORMED | 1 | 标准差值平方和匹配,也叫标准平方差匹配,规则同上 |
cv2.TM_CCORR | 2 | 相关匹配。可以理解为相似程度,匹配程度越高,计算结果越大 |
cv2.TM_CCORR_NORMED | 3 | 标准相关匹配,规则同上 |
cv2.TM_CCOEFF | 4 | 相关系数匹配,也属于相似程度,计算结果为-1~1的浮点数,1表示完全匹配,О表示毫无关系,-1表示2张图片亮度刚好相反 |
cv2.TM_CCOEFF_NORMED | 5 | 标准相关系数匹配,规则同上 |
- mask:可选参数。掩模,只有cv2.TM_SQDIFF和cv2.TM_CCORR_NORMED支持此参数,建议采用默认值。
返回值说明: - result:计算得出的匹配结果。如果原始图像的宽、高分别为W、H,模板图像的宽、高分别为w、h,result就是一个W-w+1列、H-h+1行的32位浮点型数组。数组中每一个浮点数都是原始图像中对应像素位置的匹配结果,其含义需要根据method参数来解读。
单个元素进行匹配并绘制矩形框
效果
要匹配的元素:
匹配的图片:
匹配后的图片:
代码
import cv2
img = cv2.imread("img_total.png") # 读取原始图像
templ = cv2.imread("target.png") # 读取模板图像
width, height, c = templ.shape # 获取模板图像的宽度、高度和通道数
results = cv2.matchTemplate(img, templ, cv2.TM_SQDIFF_NORMED) # 按照标准平方差方式匹配
# 获取匹配结果中的最小值、最大值、最小值坐标和最大值坐标
minValue, maxValue, minLoc, maxLoc = cv2.minMaxLoc(results)
resultPoint1 = minLoc # 将最小值坐标当做最佳匹配区域的左上角点坐标
# 计算出最佳匹配区域的右下角点坐标
resultPoint2 = (resultPoint1[0] + width, resultPoint1[1] + height)
# 在最佳匹配区域位置绘制红色方框,线宽为2像素
cv2.rectangle(img, resultPoint1, resultPoint2, (0, 0, 255), 2)
cv2.imshow("img", img) # 显示匹配的结果
cv2.waitKey() # 按下任何键盘按键后
cv2.destroyAllWindows() # 释放所有窗体
标签:匹配,img,cv2,OpenCV,TM,图像,模板
From: https://blog.csdn.net/summerriver1/article/details/136984333