36 lines
2.1 KiB
Python
36 lines
2.1 KiB
Python
# 使用模板匹配查找图像
|
|
# 1、准备待匹配的图像和模板:首先准备一张待匹配的图像,以及一个要查找的目标模板图像。确保模板图像大小与待匹配图像中目标的预期大小相匹配。
|
|
# 2、选择合适的匹配方法:根据需求选择合适的匹配方法,常见的包括平方差匹配法、相关性匹配法和归一化互相关匹配法。
|
|
# 3、对待匹配图像和模板进行预处理(可选):根据需要,可以对待匹配图像和模板进行预处理,例如将彩色图像转换为灰度图像,对图像进行平滑、直方图均衡化等。
|
|
# 4、在待匹配图像中执行模板匹配:使用选择的匹配方法,在待匹配图像中执行模板匹配操作。这需要将模板按照不同的位置在待匹配图像上滑动,并计算匹配度。
|
|
# 5、设置阈值和确定匹配位置:根据匹配度的结果,确定一个合适的阈值来判断匹配是否达到预期。如果匹配度超过阈值,可以认为找到了目标模板的位置。
|
|
# 6、可选:多目标匹配或后处理(可选):如果需要在图像中多次匹配同一模板,可以重复步骤4和5。此外,还可以进行后处理操作,如非极大值抑制,去除重复匹配等。
|
|
# 7、可视化结果:最后,根据匹配结果,可以在待匹配图像上标注或绘制出目标模板的位置,以便观察和分析匹配效果。
|
|
|
|
import cv2
|
|
|
|
image = cv2.imread('image.png')
|
|
template = cv2.imread('template.jpg')
|
|
cv2.imshow('image', image)
|
|
cv2.imshow('template', template)
|
|
|
|
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
|
|
gray_template = cv2.cvtColor(template, cv2.COLOR_BGR2GRAY)
|
|
|
|
method = cv2.TM_SQDIFF_NORMED
|
|
|
|
result = cv2.matchTemplate(gray_image, gray_template, method)
|
|
|
|
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)
|
|
|
|
threshold = 0.1
|
|
if min_val < threshold:
|
|
top_left = min_loc
|
|
h, w = gray_template.shape
|
|
bottom_right = (top_left[0] + w, top_left[1] + h)
|
|
cv2.rectangle(image, top_left, bottom_right, (0, 255, 0), 2)
|
|
|
|
cv2.imshow('Matched Image', image)
|
|
cv2.waitKey(0)
|
|
cv2.destroyAllWindows()
|