Есть ли более быстрый способ найти пиксели (по цвету) в изображении с помощью PIL - PullRequest
0 голосов
/ 24 марта 2019

Я пытаюсь сделать бота, который играет "Не касайтесь белой плитки".Код, который у меня до сих пор работает, работает отлично, но он немного медленный, и по мере ускорения игры бот перестает работать.

Сейчас я беру 4 изображения, используя PIL ImageGrab.grab():

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)

Как я уже говорил, это работает, но даже когда игра идет медленно, она щелкаетв середине плитки, а не внизу.Поэтому, если вам известен более быстрый способ сделать это или вы видите ошибку или что-то еще, пожалуйста, дайте мне знать.

Редактировать: добавлен рисунок

...