diff --git a/实验五/image.png b/实验五/image.png new file mode 100644 index 0000000..177f574 Binary files /dev/null and b/实验五/image.png differ diff --git a/实验五/template.jpg b/实验五/template.jpg new file mode 100644 index 0000000..d642c1b Binary files /dev/null and b/实验五/template.jpg differ diff --git a/实验五/test3.py b/实验五/test3.py new file mode 100644 index 0000000..187d996 --- /dev/null +++ b/实验五/test3.py @@ -0,0 +1,35 @@ +# 使用模板匹配查找图像 +# 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()