导读:本期聚焦于小伙伴创作的《Python怎么做游戏脚本?基于OpenCV图像模板匹配与屏幕找图自动点击挂机教程》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《Python怎么做游戏脚本?基于OpenCV图像模板匹配与屏幕找图自动点击挂机教程》有用,将其分享出去将是对创作者最好的鼓励。

使用Python结合OpenCV开发游戏脚本,核心是通过图像模板匹配找到屏幕上目标元素的位置,再模拟鼠标点击完成自动操作,适合处理游戏中重复性的点击任务。

Python怎么做游戏脚本?基于OpenCV图像模板匹配与屏幕找图自动点击挂机教程

环境准备

首先需要在本地安装对应的依赖库,确保后续代码可以正常运行。需要安装的库包括OpenCV用于图像处理,pyautogui用于模拟鼠标操作,Pillow用于屏幕截图。执行以下命令完成安装:

pip install opencv-python pyautogui pillow

图像模板匹配原理

模板匹配是OpenCV提供的功能,原理是将小尺寸的模板图像在大的源图像上滑动,逐个位置计算模板和源图像对应区域的相似度,相似度最高的位置就是匹配到的目标位置。OpenCV提供了多种相似度计算方式,常用的有cv2.TM_CCOEFF_NORMED,返回值的范围是-1到1,越接近1表示匹配度越高。

实现步骤

1. 准备模板图像

首先需要截取游戏中需要点击的目标元素的图片,保存为模板图像,比如保存为target.png,尽量保证模板图像清晰,没有多余的背景内容,尺寸不要过大。

2. 获取屏幕截图

使用Pillow库获取当前屏幕的截图,再转换为OpenCV可以处理的格式。示例代码如下:

import cv2
import pyautogui
from PIL import Image

def get_screen_shot():
    # 获取屏幕截图
    screen_img = pyautogui.screenshot()
    # 转换为OpenCV的BGR格式
    screen_np = cv2.cvtColor(np.array(screen_img), cv2.COLOR_RGB2BGR)
    return screen_np

注意需要导入numpy库,在代码开头添加import numpy as np

3. 模板匹配找图

读取模板图像和屏幕截图,执行模板匹配操作,获取匹配位置的坐标。代码示例如下:

def find_target_position(screen_img, template_path, threshold=0.8):
    # 读取模板图像
    template = cv2.imread(template_path)
    # 获取模板的高度和宽度
    th, tw = template.shape[:2]
    # 执行模板匹配
    result = cv2.matchTemplate(screen_img, template, cv2.TM_CCOEFF_NORMED)
    # 获取匹配结果中大于阈值的位置
    min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)
    # 如果最大相似度大于阈值,返回目标中心坐标
    if max_val >= threshold:
        # 计算目标中心坐标
        center_x = max_loc[0] + tw // 2
        center_y = max_loc[1] + th // 2
        return center_x, center_y, max_val
    else:
        return None, None, max_val

4. 模拟鼠标点击

当找到目标位置后,使用pyautogui模拟鼠标点击操作,同时可以添加适当的延迟,避免操作过快被游戏检测。代码示例如下:

import time

def auto_click():
    template_path = "target.png"
    threshold = 0.8
    while True:
        # 获取屏幕截图
        screen = get_screen_shot()
        # 查找目标位置
        x, y, match_val = find_target_position(screen, template_path, threshold)
        if x is not None:
            print(f"找到目标,相似度:{match_val},坐标:({x}, {y})")
            # 移动鼠标到目标位置并点击
            pyautogui.click(x, y)
            # 点击后等待1秒再进行下一次检测
            time.sleep(1)
        else:
            print(f"未找到目标,最高相似度:{match_val}")
            # 未找到时等待0.5秒再重试
            time.sleep(0.5)

if __name__ == "__main__":
    # 预留5秒时间切换到游戏窗口
    print("请在5秒内切换到游戏窗口")
    time.sleep(5)
    auto_click()

注意事项

  • 模板图像需要和游戏内的目标元素比例一致,如果游戏窗口分辨率变化,可能需要重新截取模板图像。
  • 阈值可以根据实际情况调整,如果匹配不到目标可以适当降低阈值,但过低容易出现误匹配。
  • 部分游戏有反作弊机制,使用脚本前需要确认游戏允许相关操作,避免账号被封禁。
  • 运行脚本时如果需要停止,可以将鼠标快速移动到屏幕左上角,pyautogui会触发失败安全机制停止操作。

完整示例代码

以下是整合所有功能的完整代码,保存为game_script.py后可以直接运行:

import cv2
import pyautogui
import time
import numpy as np
from PIL import Image

def get_screen_shot():
    screen_img = pyautogui.screenshot()
    screen_np = cv2.cvtColor(np.array(screen_img), cv2.COLOR_RGB2BGR)
    return screen_np

def find_target_position(screen_img, template_path, threshold=0.8):
    template = cv2.imread(template_path)
    th, tw = template.shape[:2]
    result = cv2.matchTemplate(screen_img, template, cv2.TM_CCOEFF_NORMED)
    min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)
    if max_val >= threshold:
        center_x = max_loc[0] + tw // 2
        center_y = max_loc[1] + th // 2
        return center_x, center_y, max_val
    else:
        return None, None, max_val

def auto_click():
    template_path = "target.png"
    threshold = 0.8
    while True:
        screen = get_screen_shot()
        x, y, match_val = find_target_position(screen, template_path, threshold)
        if x is not None:
            print(f"找到目标,相似度:{match_val},坐标:({x}, {y})")
            pyautogui.click(x, y)
            time.sleep(1)
        else:
            print(f"未找到目标,最高相似度:{match_val}")
            time.sleep(0.5)

if __name__ == "__main__":
    print("请在5秒内切换到游戏窗口")
    time.sleep(5)
    auto_click()

PythonOpenCV图像模板匹配屏幕找图自动点击修改时间:2026-07-13 04:18:13

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。