如何实现单图与文件夹图片相似度比对,支持类似pyautogui的confidence阈值设置
可行实现方案
pyautogui的confidence参数底层就是基于OpenCV的模板匹配算法实现的,你可以直接用OpenCV复现相同的匹配逻辑,完全兼容你之前基于confidence参数开发的脚本逻辑。
具体实现步骤
- 先安装依赖:
pip install opencv-python numpy - 核心逻辑完全对齐pyautogui的实现:用
cv2.matchTemplate做模板匹配,拿到的最大匹配值对应pyautogui的confidence阈值判断即可
可直接运行的示例代码
import cv2 import numpy as np import os def match_image(template_path, target_img_path, confidence_threshold): # 读取模板图和待匹配图,转灰度图,和pyautogui默认处理逻辑一致 template = cv2.imread(template_path, 0) target = cv2.imread(target_img_path, 0) # 处理模板尺寸大于待匹配图的异常场景 if template.shape[0] > target.shape[0] or template.shape[1] > target.shape[1]: return False, 0.0 # 采用TM_CCOEFF_NORMED匹配算法,和pyautogui默认算法完全一致 result = cv2.matchTemplate(target, template, cv2.TM_CCOEFF_NORMED) min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result) # 匹配度达到阈值则返回成功 return max_val >= confidence_threshold, max_val # 调用示例 if __name__ == "__main__": template_path = "你的模板图片路径.jpg" target_folder = "待比对的文件夹路径" confidence = 0.5 # 对应你需要的50%匹配阈值,和pyautogui的confidence参数取值范围完全一致 for filename in os.listdir(target_folder): # 仅处理常见图片格式,可根据需求拓展后缀 if filename.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp')): target_path = os.path.join(target_folder, filename) is_match, score = match_image(template_path, target_path, confidence) if is_match: print(f"匹配成功:{filename},匹配度{score:.2f}") # 此处写入你需要执行的对应操作
可选拓展
如果需要支持不同缩放比例的图片匹配,可以额外增加图像金字塔缩放逻辑,对模板或者待匹配图做多尺度缩放后再匹配,覆盖更多尺寸不匹配的场景。
内容的提问来源于stack exchange,提问作者egsy666
相关产品推荐
相关产品推荐

