如何使用Python的PIL在特定区域中查找屏幕上的某种像素颜色?
如果某个像素颜色出现在预先指定的区域中,我需要一个在Python 2.7中启动命令的函数。我尝试了以下代码,但无济于事:
def game_one():
box = (x_pad+1, y_pad+1, x_pad+1179, y_pad+474)
im = ImageGrab.grab(box)
return im
rgb_im = im.convert('RGB')
for x in range(1055, 1120, 1):
for y in range(20, 464, 1):
pix = rgb_im.getpixel((x, y))
if pix != (255,0,255):
startPlaying()
time.sleep(.2)
clickbuttonone()
print "Pixel Found!"
else:
print "Waiting for pixel to appear"
(x_pad和y_pad是预定义的屏幕变量 - 与问题无关,但有助于捕获整个屏幕)
已导入ImageOps和Image,win32api和win32con也是如此。
非常感谢!
答案 0 :(得分:0)
要搜索直到找到像素,您可以使用循环。然而,从本质上讲,它将是一个无限循环,这是不好的做法。我添加了120秒(2分钟)的超时,您可以根据需要进行调整。
import time
pf = False #check if pixel was found
start_time = time.time()
def game_one():
box = (x_pad+1, y_pad+1, x_pad+1179, y_pad+474)
im = ImageGrab.grab(box)
# return im
rgb_im = im.convert('RGB')
while (pf == False) and ((time.time()-start_time) < 120):
for x in range(1055, 1120, 1):
if pf == True:
break
for y in range(20, 464, 1):
pix = rgb_im.getpixel((x, y))
if pix != (255,0,255):
startPlaying()
time.sleep(.2)
clickbuttonone()
print "Pixel Found!"
pf = True
break
else:
print "Waiting for pixel to appear"
另外,请确保检查缩进 - 它可能仅用于在此网站上发布,但功能定义不应与功能的其余部分位于同一行。
编辑:好的我认为我找到了主要问题。你看到我评论return im
的位置了吗?返回语句结束您的功能并且在处理之后没有任何内容。您的代码甚至无法进入for
循环。试试这个。这就是为什么打印这种奇怪类型的东西,因为那是你要归还的东西!