Python钓鱼游戏自动按E脚本开发:颜色识别失效问题求助
解决钓鱼游戏自动化脚本的颜色识别问题
你的代码无法识别目标颜色主要有三个核心问题,下面是具体的问题分析和修正方案:
问题分析
getcolors()方法使用错误:该方法返回的是[(颜色出现次数, (R,G,B)), ...]格式的元组列表,并非单纯的颜色值,直接用color in ps.getcolors()永远无法匹配成功。- 未定义变量报错:代码开头的
fishing_image变量未初始化,运行时会直接抛出NameError,导致脚本中断。 - 精确颜色匹配的局限性:游戏画面可能存在抗锯齿、亮度波动等情况,单一精确RGB值的匹配很容易漏判。
修正后的代码
import pyautogui from time import sleep from PIL import Image # 目标红色的RGB范围(可根据实际画面微调) TARGET_R_RANGE = (80, 95) TARGET_G_RANGE = (35, 45) TARGET_B_RANGE = (35, 45) # 游戏中目标区域的截图坐标(请根据你的界面调整) SCREEN_CAPTURE_REGION = (1267, 833, 300, 100) def check_target_color(screenshot): rgb_img = screenshot.convert("RGB") pixel_data = rgb_img.load() width, height = rgb_img.size # 遍历截图内的所有像素 for x in range(width): for y in range(height): r, g, b = pixel_data[x, y] # 检查当前像素是否在目标颜色范围内 if (TARGET_R_RANGE[0] <= r <= TARGET_R_RANGE[1] and TARGET_G_RANGE[0] <= g <= TARGET_G_RANGE[1] and TARGET_B_RANGE[0] <= b <= TARGET_B_RANGE[1]): return True return False while True: # 截取指定区域的屏幕画面 current_screenshot = pyautogui.screenshot(region=SCREEN_CAPTURE_REGION) if check_target_color(current_screenshot): print("检测到目标红色,触发E键") pyautogui.press('e') # 休眠避免短时间内重复触发 sleep(0.5) else: print("未检测到目标颜色") sleep(0.1)
关键修改说明
- 移除了未定义的
fishing_image相关代码,解决启动报错问题。 - 替换颜色匹配逻辑:放弃
getcolors(),改为遍历像素并检查颜色范围,适配游戏画面的颜色波动。 - 增加颜色范围参数:设置RGB值的上下限,不再依赖单一精确值,提升识别稳定性。
- 优化触发逻辑:按下E键后增加0.5秒休眠,防止同一帧多次触发按键操作。
额外优化建议
- 缩小截图区域:如果目标红色只出现在固定的小区域,缩小
SCREEN_CAPTURE_REGION的范围可以大幅提升识别速度。 - 固定坐标检查:若目标红色的位置完全固定,可直接使用
pyautogui.pixel(x, y)读取指定坐标的颜色,无需截取整个区域,效率更高。 - 调试技巧:可以在检测到颜色时保存截图,或者打印当前匹配到的像素RGB值,用于微调颜色范围参数。
内容的提问来源于stack exchange,提问作者Dollyn
相关产品推荐
相关产品推荐

