FindImages:图像搜索与匹配
FindImages 模块提供了多种视觉匹配算法,包括高效的模板匹配(Template Matching)和适用于缩放、旋转场景的特征点匹配(AKAZE)。
1. 导入模块
# 导入图色识别类
from ascript.windows.screen import FindImages
2. 静态方法
🖼️ 模板匹配 find_all_template()
在目标图像中搜索所有与模板图相似的区域。适用于目标大小固定且未发生明显旋转的场景。
代码块:
# 查找所有匹配的图像区域
FindImages.find_all_template(im_search, im_source=None, threshold=0.8, max_res=0, rgb=False)
参数详解:
- im_search (str | PIL | NumPy): 模板图。可以是图片路径、PIL 对象或 NumPy 数组。
- im_source (str | PIL | NumPy | Window | int | None): 搜索源。
None: 自动截取全屏。Window: 传入窗口对象,自动截取该窗口画面。int: 视为窗口句柄 (HWND),自动截取该句柄画面。- 其他情况可传入图片路径或图像对象。
- threshold (float): 相似度阈值(0.0 ~ 1.0)。默认
0.8。 - max_res (int): 最大返回结果数量。
0表示返回所有匹配项。 - rgb (bool): 是否开启色彩权重匹配。开启后对颜色差异更敏感。
返回值:
- 返回包含匹配信息的字典列表。例如:
[{'result': (x, y), 'rectangle': ((l,t), (l,b), (r,t), (r,b)), 'confidence': 0.9}, ...]。
🔍 特征点匹配 find_akaze()
使用 AKAZE 算法进行特征匹配。相比模板匹配,它对图像的缩放、旋转及部分遮挡具有更强的鲁棒性。
代码块:
# 使用特征点算法查找目标
FindImages.find_akaze(im_search, im_source=None, threshold=0.5, min_match=10)
参数详解:
- im_search / im_source: 同
find_all_template()方法。 - threshold (float): 特征匹配的阈值。
- min_match (int): 最小特征匹配点数。匹配 到的特征点超过此值才视为成功。
返回值:
- 成功返回包含目标中心坐标及矩形范围的字典,失败返回
None。
💡 案例演示
from ascript.windows.window import Window
from ascript.windows.screen import FindImages
# 1. 准备搜索源:获取 指定窗口
win = Window.find(title_re="微信")
# 2. 模板匹配:在微信窗口内查找“发送”按钮
# 假设 send_btn.png 是你提前准备好的按钮截图
results = FindImages.find_all_template(
im_search="res/send_btn.png",
im_source=win,
threshold=0.9
)
if results:
# 获取第一个匹配结果的中心坐标
target_pos = results[0]['result']
print(f"找到按钮,坐标为: {target_pos}")
# 3. 特征点匹配:查找可能存在缩放的图标
icon_info = FindImages.find_akaze(
im_search="res/app_icon.png",
im_source=None # 在全屏查找
)
if icon_info:
print(f"特征匹配成功,中心点: {icon_info['result']}")