You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dead By Daylight血网AIR Bot为何无法识别正确颜色?

问题分析与解决思路

你遇到的颜色识别偏差问题,主要源于以下几个核心原因:

1. 绝对颜色匹配的局限性

游戏里的「白色」元素(比如血网可点击节点)几乎不会是绝对RGB(255,255,255)——抗锯齿效果、屏幕gamma校正、游戏内光影渲染都会让实际像素颜色和理想纯白产生细微偏差。用严格的r == 255 and g == 255 and b == 255判断,要么会漏掉真正的目标,要么会因为截图采样误差,误把接近纯白的浅灰、淡色像素当成纯白。

2. 截图颜色模式的干扰

pyautogui.screenshot()返回的图像可能带有Alpha通道(RGBA模式),直接提取r,g,b时,可能会把Alpha通道值错误解析为颜色通道值,导致颜色判断完全偏离预期。

3. 采样步长的精度问题

你用range(0,width,10)和range(0,height,10)跳步采样,虽然提升了效率,但容易跳过真正的纯白像素,反而采样到目标边缘的过渡色(比如抗锯齿区域),进而误判为目标。


修正后的代码

from pyautogui import *
import pyautogui
import time
import keyboard
import win32api, win32con

time.sleep(2)

def click(x,y):
    win32api.SetCursorPos((x,y))
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,0,0)
    time.sleep(1.3)
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,0,0)

while not keyboard.is_pressed('q'):
    # 强制转换为RGB模式,消除Alpha通道干扰
    pic = pyautogui.screenshot(region=(250,200,750,750)).convert('RGB')
    width, height = pic.size
    target_found = False  # 标记已找到目标,避免单次截图内重复点击
    
    for x in range(0, width, 5):  # 缩小步长,提升采样精度
        if target_found:
            break
        for y in range(0, height, 5):
            r,g,b = pic.getpixel((x,y))
            # 设置颜色容差,匹配游戏中实际的"白色"像素
            if r >= 245 and g >= 245 and b >= 245:
                click(x+250, y+200)
                time.sleep(0.5)  # 延长等待,避免操作冲突
                target_found = True
                break

关键修改说明

  • 强制RGB模式:通过convert('RGB')确保截图无Alpha通道,避免颜色解析错误。
  • 颜色容差判断:将严格匹配改为阈值判断,你可以根据实际截图调整245这个数值(建议在240-250区间测试),适配游戏内真实的白色像素。
  • 添加目标标记:用target_found变量在找到目标后直接跳出所有循环,避免单次截图内重复点击。
  • 缩小采样步长:把步长从10改为5,提升采样精度,减少漏判或误判概率。

内容的提问来源于stack exchange,提问作者Charlie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 20:48:22