如何使用Python结合OpenCV与PyAutoGUI检测模板坐标?
使用Python+OpenCV+PyAutoGUI检测屏幕模板坐标
嘿,我把这段用于检测屏幕指定区域内模板坐标的代码整理并补全了,关键步骤也给你标注清楚了:
import cv2 import numpy as np import pyautogui as pag # 截取屏幕上指定区域的截图 # region参数格式:(x起始坐标, y起始坐标, 区域宽度, 区域高度) region = (460, 400, 600, 400) pag.screenshot('da2.png', region=region) # 读取截图和模板图,进行图像预处理 img_rgb = cv2.imread('da2.png') img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY) # 转换为灰度图,减少计算量 template = cv2.imread('player2.png', 0) # 0表示直接以灰度模式读取模板图 w, h = template.shape[::-1] # 获取模板的宽和高 # 执行模板匹配,使用归一化相关系数匹配方法 res = cv2.matchTemplate(img_gray, template, cv2.TM_CCOEFF_NORMED) threshold = 0.6335 # 匹配阈值,值越高匹配精度要求越高 # 筛选出匹配度超过阈值的坐标位置 loc = np.where(res >= threshold) # 在原图上标记所有匹配到的区域 for pt in zip(*loc[::-1]): cv2.rectangle(img_rgb, pt, (pt[0] + w, pt[1] + h), (0, 0, 255), 2) # 保存标记后的结果图,或者直接显示 cv2.imwrite('result.png', img_rgb) # cv2.imshow('Matched Result', img_rgb) # cv2.waitKey(0) # cv2.destroyAllWindows()
关键步骤说明
- 屏幕区域截图:通过PyAutoGUI的
screenshot方法截取指定坐标范围的屏幕内容,避免全图检测的冗余计算 - 灰度转换:将截图和模板都转为灰度图,消除颜色干扰,同时降低图像数据量,提升匹配速度
- 模板匹配:选用
TM_CCOEFF_NORMED方法,返回的匹配结果是归一化后的数值,方便通过阈值筛选有效匹配 - 阈值筛选:设置
0.6335作为匹配阈值,只有匹配度超过这个值的位置才会被认定为有效目标 - 结果标记:遍历所有有效匹配点,用红色矩形框在原图上标记出模板所在位置,方便直观查看
内容的提问来源于stack exchange,提问作者san yi
相关产品推荐
相关产品推荐

