Python屏幕特定颜色检测脚本失效,请求技术协助
问题排查与修复
你的脚本无法识别目标的核心问题是逻辑错误和匹配方式不合理,具体问题和修复方案如下:
存在的问题
- 颜色遍历逻辑混乱:原代码的
while循环会在第一个像素遍历完所有颜色范围后,将var设为False,导致后续所有像素都不再进行颜色检查。 - 精确匹配不适用渐变场景:3D物体的浅紫色是渐变范围,用
color == (r,g,b)的精确匹配很难命中实际像素(屏幕像素的RGB值很少会和你逐个递增的数值完全重合)。 - 变量初始化位置错误:
r、g、b应该在每个像素检查前重置初始值,而不是只在y循环初始化一次。
修复后的代码
我们直接对每个像素的RGB值做范围判断,既高效又能覆盖渐变颜色:
from PIL import ImageGrab # 定义浅紫色的RGB范围 R_MIN, R_MAX = 230, 260 G_MIN, G_MAX = 0, 2 B_MIN, B_MAX = 200, 220 screen = ImageGrab.grab() px = screen.load() width, height = screen.size found = False for y in range(height): for x in range(width): r, g, b = px[x, y] # 检查当前像素是否在目标颜色范围内 if (R_MIN <= r <= R_MAX) and (G_MIN <= g <= G_MAX) and (B_MIN <= b <= B_MAX): print(f"Found at ({x}, {y})") found = True # 找到后可以直接退出循环,不需要继续检查 break if found: break print("Done" if found else "Not found")
额外优化建议
- 可以降低遍历步长(比如
range(0, height, 2))来提升检测速度,牺牲一点精度换效率。 - 如果目标物体有特定形状,可以在颜色匹配后加入形状判断,避免误识别孤立像素。
内容的提问来源于stack exchange,提问作者sam dalian
相关产品推荐
相关产品推荐

