PyAutoGUI像素颜色检测脚本异常:像素变白时循环无法终止
问题:循环检测像素变色却无法终止的原因及修复方案
嗨,你遇到的问题其实很典型——变量没有及时更新导致判断逻辑失效!
看你的代码,问题出在这里:你只在循环开始前给变量a赋值了一次初始的像素值,之后在循环里虽然重新截取了屏幕并保存成了新的current.png,但从来没有更新a的取值。也就是说,循环里一直拿着最开始那次的像素值在做判断,哪怕新截图里的像素已经变成白色了,a还是原来的非白色值,自然永远不会触发break终止循环。
修复后的基础版本
只需要在每次重新截图后,重新调用rgb_of_pixel获取最新的像素值并赋值给a即可:
import pyautogui from PIL import Image import time def rgb_of_pixel(img_path, x, y): im = Image.open(img_path).convert('RGB') r, g, b = im.getpixel((x, y)) return (r, g, b) # 初始化截图并获取初始像素值 current = pyautogui.screenshot(region=(949, 502, 10, 5)) current.save("./current.png") a = rgb_of_pixel("./current.png", 1, 1) print(a) while True: if a == (255, 255, 255): print('It is white!') break else: # 重新截图 current = pyautogui.screenshot(region=(949, 502, 10, 5)) current.save("./current.png") # 关键:更新a为最新的像素值 a = rgb_of_pixel("./current.png", 1, 1) print(a) time.sleep(0.5)
更高效的优化方案
其实你完全不需要每次都把截图保存到本地文件,直接在内存中处理截图对象就行,这样能避免频繁读写文件的开销,运行效率更高也更稳定:
import pyautogui from PIL import Image import time def get_pixel_rgb(screenshot, x, y): # 直接对内存中的截图对象转换为RGB并获取像素值 rgb_screenshot = screenshot.convert('RGB') return rgb_screenshot.getpixel((x, y)) while True: # 每次循环直接获取屏幕截图的内存对象 screenshot = pyautogui.screenshot(region=(949, 502, 10, 5)) pixel_color = get_pixel_rgb(screenshot, 1, 1) print(pixel_color) if pixel_color == (255, 255, 255): print('It is white!') break time.sleep(0.5)
这个版本去掉了文件保存的步骤,逻辑更简洁,也减少了潜在的文件操作问题。
内容的提问来源于stack exchange,提问作者Fetige Pomes
相关产品推荐
相关产品推荐

