1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
| import cv2
import numpy as np
import mss
import time
import os
# -----------------------------
# 模板图像路径(推荐 PNG 或 JPG)
# -----------------------------
template_path = "1.tif" # 请替换为你的图像路径
# -----------------------------
# 匹配阈值(0~1之间)
# 越接近1要求越严格,一般0.8为起点
# -----------------------------
threshold = 0.8
# -----------------------------
# 初始化变量
# -----------------------------
Result = 0
found_x, found_y = None, None
# -----------------------------
# 读取模板图像,只执行一次
# 使用灰度图加快匹配速度
# -----------------------------
template = cv2.imread(template_path, cv2.IMREAD_GRAYSCALE)
if template is None:
raise FileNotFoundError(f"模板图像未找到:{template_path}")
# 获取模板图尺寸
template_h, template_w = template.shape[:2]
# -----------------------------
# 创建 mss 实例,进行截图
# -----------------------------
with mss.mss() as sct:
# 可指定屏幕区域:top, left, width, height
# monitor = {"top": 0, "left": 0, "width": 1920, "height": 1080}
monitor = sct.monitors[1] # 全屏(第1号显示器)
# 延迟等待游戏加载完成(可视情况修改)
time.sleep(1)
# 截图一次
screenshot = np.array(sct.grab(monitor))
# mss 返回的是 BGRA 图像,转换为灰度图以便匹配
screenshot_gray = cv2.cvtColor(screenshot, cv2.COLOR_BGRA2GRAY)
# -----------------------------
# 模板匹配(使用标准相关系数方法)
# 返回匹配结果矩阵,每个像素点代表匹配得分
# -----------------------------
MSSResult = cv2.matchTemplate(screenshot_gray, template, cv2.TM_CCOEFF_NORMED)
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(MSSResult)
# -----------------------------
# 判断是否匹配成功
# -----------------------------
if max_val >= threshold:
Result = 1
found_x, found_y = max_loc # 左上角坐标
# -----------------------------
# 控制台输出匹配结果
# 可用于后续逻辑判断
# -----------------------------
if Result:
print(f"Result 1 {found_x} {found_y}")
else:
print("Result 0")
|