2015-05-14 2 views
1

Есть ли способ найти пиксель (внутри поверхности/изображения) по цвету? нравится:Python/PyGame: Найти пиксель по colorcode

img = python.image.load("image.gif").convert() 
img.find((255, 255, 255)) >> (50, 100) = white pixel 

Если вы не знаете, что я имею в виду, не стесняйтесь спрашивать. Спасибо!

+0

Нет, нет. Но вы можете перебирать каждый пиксель в 2D-матрице и находить их сами :) – Torxed

ответ

1
def findPixel(img, r, g, b): 
    for x in range(0, img.get_width()): 
     for y in range(0, img.get_height()): 
      pixel = img.get_at((x, y)) 
      if pixel[0] >= r and pixel[1] >= g and pixel[2] >= b: 
       return pixel 
    return None 

Это написано на моей голове. Передача вашего объекта изображения должна содержать слово. Если нет, вам нужно будет ввести ссылку на объект image.surface. Но идея итерации над X и Y должна работать теоретически.

Pygame хозяина нет функции, как это, но это предоставить вам возможность получить или итерации по позиции пикселя.

Существует более быстрый способ хранения всего массива изображений перед циклом и повторение этого массива вместо вызова функции get_at, на которую я верю, однако я не использую Pygame в эти дни, поэтому могу " t проверить разницу в оптимизации двух реализаций, поэтому я оставлю это при этом и оставлю оптимизацию для вас.

Если вы заинтересованы в поиске все цветовые значения, соответствующие вашим параметрам (спасибо SuperBiasedMan):

def findPixel(img, r, g, b): 
    found = [] 
    for x in range(0, img.width): 
     for y in range(0, img.height): 
      pixel = img.get_at((x, y)) 
      if pixel[0] >= r and pixel[1] >= g and pixel[2] >= b: 
       found.append((x, y)) 
    return found 

Обратите внимание, что это будет медленнее, но вы найдете все пиксели в один итерация.

+1

Также вы можете изменить это, чтобы вернуть список пикселей с этим цветом, просто создав пустой список, а затем изменив «return pixel» на 'list.append (pixel) 'и затем изменить' return None', чтобы вернуть 'yourListName'. – SuperBiasedMan

+1

@SuperBiasedMan. Вы правы, это медленнее по своей природе, но стоит положить туда. Обновлен мой ответ! :) – Torxed

+0

Ну, если нет более быстрого пути, я собираюсь сделать это (немного другое). Моя идея - показать запись камеры (много изображений в секунду) и пометить самый темный объект все время. –

Смежные вопросы