是否有使用PIL查找图像中的像素(按颜色)的更快方法

时间:2019-03-24 11:58:28

标签: python python-imaging-library

我正在尝试制作一个玩“不要点击白砖”的机器人。 到目前为止,我拥有的代码可以正常工作,但是有点慢,并且随着游戏速度的提高,该bot也会失败。

现在我正在使用PIL的ImageGrab.grab()抓取4张图像:

image_r = ImageGrab.grab(bbox=(160, 500, 180, 900))
image_cr = ImageGrab.grab(bbox=(600, 500, 620, 900))
image_cl = ImageGrab.grab(bbox=(1020, 500, 1040, 900))
image_l = ImageGrab.grab(bbox=(1440, 500, 1460, 900))

image_r⇒右图
image_cr⇒右中图像
image_cl⇒左中心图像
image_l⇒左图

在下面您可以看到带有带有指示图像的框的游戏(大约)

enter image description here

然后针对每个像素,我用以下方法检查黑色像素:

def get_black_px(image,x):
    for y in range(image.size[1]-5, 5, -10):
        R , G, B = image.getpixel((x,y))
        if R < 40 or G < 40 or B < 40:
            R, G, B = image.getpixel((x, y+2)) #this is done since the lines
            if R < 40 or G < 40 or B < 40:     #between the tiles are also black
                return y

如果检测到瓷砖,则将鼠标移到那里并单击

if get_black_px(image_r, 10) != None:
    Mouse.position = (170, get_black_px(image_r, 10)+500)
    Mouse.click(Button.right, 1)
elif get_black_px(image_cr, 10) != None:
    Mouse.position = (610, get_black_px(image_cr, 10)+500)
    Mouse.click(Button.right, 1)
elif get_black_px(image_cl, 10) != None:
    Mouse.position = (1030, get_black_px(image_cl, 10)+500)
    Mouse.click(Button.right, 1)
elif get_black_px(image_l, 10) != None:
    Mouse.position = (1440, get_black_px(image_l, 10)+500)
    Mouse.click(Button.right, 1)

正如我之前说过的那样,这是可行的,但是即使游戏速度很慢,它也会在图块的中间而非底部单击。因此,如果您知道执行此操作的更快方法或发现错误或其他错误,请告诉我。

编辑:添加图片

0 个答案:

没有答案