Skip to main content

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']}")