43 lines
1.3 KiB
Python
43 lines
1.3 KiB
Python
import cv2
|
||
import numpy as np
|
||
|
||
|
||
def template_matching_visualization(original_image_path, template_image_path):
|
||
# 读取原始图像和模板图像
|
||
img = cv2.imread(original_image_path)
|
||
template = cv2.imread(template_image_path)
|
||
|
||
# 确认模板大小为64x64,如果不是请调整
|
||
if template.shape[0] != 64 or template.shape[1] != 64:
|
||
print("警告:模板图像尺寸不是64x64")
|
||
|
||
# 执行模板匹配,采用的方法是平方差匹配 method=cv2.TM_SQDIFF
|
||
result = cv2.matchTemplate(img, template, cv2.TM_SQDIFF_NORMED)
|
||
|
||
# 寻找最匹配的位置
|
||
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)
|
||
|
||
# 获取匹配位置的左上角坐标
|
||
top_left = min_loc
|
||
h, w = template.shape[:2]
|
||
|
||
# 计算右下角坐标
|
||
bottom_right = (top_left[0] + w, top_left[1] + h)
|
||
|
||
# 在原图上绘制矩形框显示匹配到的位置
|
||
cv2.rectangle(img, top_left, bottom_right, (0, 255, 0), 2)
|
||
|
||
# 显示结果图像
|
||
cv2.imshow("Matched Image", img)
|
||
cv2.waitKey(0)
|
||
cv2.destroyAllWindows()
|
||
|
||
return top_left, bottom_right
|
||
|
||
|
||
# 调用函数并传入原图和子图路径
|
||
original_image_path = '1.jpg'
|
||
template_image_path = '12.jpg'
|
||
|
||
position = template_matching_visualization(original_image_path, template_image_path)
|
||
print("匹配位置的左上角坐标: ", position) |