如何修改Python像素颜色检测脚本以指定触发RGB值?
问题解决与脚本修改
1. TypeError错误修复
你遇到的TypeError: rgb_pixel() takes 0 positional arguments but 3 were given错误,是因为修改rgb_pixel函数时删除了它的参数,但调用该函数的地方仍然传入了r、g、b三个像素值。解决方法很直接:给rgb_pixel函数补上三个参数即可。
2. 完整修改后的脚本
以下是实现仅检测特定RGB及相似颜色的完整脚本,同时修复了参数错误:
import pyautogui import keyboard import time # 目标RGB值 TARGET_RGB = (136, 36, 150) # 颜色相似阈值(值越小要求颜色越接近,建议范围10-30) COLOR_THRESHOLD = 20 def rgb_pixel(r, g, b): # 计算当前RGB与目标RGB的差异绝对值总和 color_diff = abs(r - TARGET_RGB[0]) + abs(g - TARGET_RGB[1]) + abs(b - TARGET_RGB[2]) # 当差异小于阈值时,返回True(匹配目标颜色) return color_diff < COLOR_THRESHOLD def detect_pixel_change(): # 设置检测的屏幕区域(示例:左上角x=100, y=100,宽高各20的区域) region = (100, 100, 20, 20) # 获取初始区域的像素颜色 initial_screenshot = pyautogui.screenshot(region=region) initial_pixels = list(initial_screenshot.getdata()) print("开始检测颜色变化...") while True: # 实时获取区域像素 current_screenshot = pyautogui.screenshot(region=region) current_pixels = list(current_screenshot.getdata()) # 遍历每个像素,检查是否有匹配目标颜色的像素 for idx, pixel in enumerate(current_pixels): # 跳过透明通道(如果有的话) if len(pixel) == 4: r, g, b, _ = pixel else: r, g, b = pixel # 调用rgb_pixel判断是否匹配目标颜色 if rgb_pixel(r, g, b): # 触发热键2 keyboard.press_and_release('2') print("检测到目标颜色,已触发热键2") # 可选:触发后暂停一段时间,避免重复触发 time.sleep(0.5) # 更新初始像素,避免持续触发 initial_pixels = current_pixels break # 避免CPU占用过高 time.sleep(0.1) if __name__ == "__main__": try: detect_pixel_change() except KeyboardInterrupt: print("检测已停止")
3. 关键代码解释
- 目标颜色与阈值设置:
TARGET_RGB是你要检测的基准颜色,COLOR_THRESHOLD控制颜色相似程度,数值越小要求颜色越接近,可根据实际需求调整。 - rgb_pixel函数修正:现在函数接收r、g、b三个参数,通过计算颜色差异绝对值总和判断是否匹配目标颜色。
- 触发逻辑调整:不再检测任意颜色变化,只有当区域内出现匹配目标的相似颜色时,才触发热键2。
- 防重复触发:触发后添加了0.5秒延迟,并更新初始像素,避免短时间内重复触发。
内容的提问来源于stack exchange,提问作者Yahes
相关产品推荐
相关产品推荐

