import cv2 import numpy as np def match_pattern(frame, pattern): # 载入模式图像 pattern_img = cv2.imread(pattern) # 获取模式图像的宽高 pattern_height, pattern_width, _ = pattern_img.shape # 使用模板匹配算法进行匹配 result = cv2.matchTemplate(frame, pattern_img, cv2.TM_CCOEFF_NORMED) # 设置匹配阈值 threshold = 0.8 # 寻找匹配结果中大于阈值的坐标 locations = np.where(result >= threshold) for loc in zip(*locations[::-1]): # 在原始图像上绘制矩形框标识匹配位置 cv2.rectangle(frame, loc, (loc[0] + pattern_width, loc[1] + pattern_height), (0, 255, 0), 2) # 返回绘制了矩形框的图像 return frame cap = cv2.VideoCapture(0) # 设置模式图像的文件名 pattern_file = 'pattern.png' while True: ret, frame = cap.read() # 调用函数进行模式匹配 result_frame = match_pattern(frame, pattern_file) # 显示结果图像 cv2.imshow('Pattern Matching Result', result_frame) # 如果按下q键则退出循环 if cv2.waitKey(1) & 0xFF == ord('q'): break # 释放摄像头资源和关闭窗口 cap.release() cv2.destroyAllWindows()
时间: 2024-04-09 08:30:13 浏览: 90
这是你提供的改写后的代码,它使用了模板匹配算法来在图像中进行匹配,并在匹配位置绘制矩形框进行标识。这段代码的逻辑是正确的,并且可以适应不同大小的模板图像进行匹配。
在代码中,我们首先载入模式图像,并获取其宽度和高度。然后使用`cv2.matchTemplate`函数进行模板匹配,并设置匹配阈值。接下来,我们寻找匹配结果中大于阈值的坐标,并在原始图像上绘制矩形框来标识匹配位置。
在主循环中,我们不断读取摄像头帧,并调用`match_pattern`函数进行模式匹配。最后,我们显示结果图像,并通过按下q键来退出循环。
这段代码看起来可以正常工作,并实现了匹配图像大小不受限制的功能。
如果还有其他问题,请随时提问。
阅读全文