Как получить координаты пикселей, если я знаю цвет (RGB)? - PullRequest
0 голосов
/ 04 июля 2018

Я использую Python, opencv и PIL.

image = cv2.imread('image.jpg')

color = (235, 187, 7)

Как я могу получить координаты пикселей (x, y), если я знаю цвет пикселей?

Ответы [ 2 ]

0 голосов
/ 04 июля 2018

Вот решение для numpythonic. Библиотека Numpy ускоряет операции везде, где это возможно.

  • Предполагается, что цвет: color = (235, 187, 7)

indices = np.where(img == color)

  • Я использовал метод numpy.where () для извлечения индексов кортежей из двух массивов, где первый массив содержит x-координаты цветных пикселей (235, 187, 7), а второй массив содержит y-координаты. из этих пикселей.

Теперь indices возвращает что-то вроде следующего:

(array([ 81,  81,  81, ..., 304, 304, 304], dtype=int64),
 array([317, 317, 317, ..., 520, 520, 520], dtype=int64),
 array([0, 1, 2, ..., 0, 1, 2], dtype=int64))
  • Затем я использовал метод zip (), чтобы получить список кортежей, содержащих эти точки.

coordinates = zip(indices[0], indices[1])

  • Но если вы заметили, поскольку это цветное изображение с тремя каналами, каждая координата будет повторяться трижды. Мы должны сохранять только уникальные координаты. Это можно сделать, используя метод set().

unique_coordinates = list(set(list(coordinates)))

0 голосов
/ 04 июля 2018

Попробуйте что-то вроде:

color = (235, 187, 7)
im = Image.open('image.gif')
rgb_im = im.convert('RGB')
for x in range(rgb_im.size()[0]):
    for y in range(rgb_im.size()[1]):
        r, g, b = rgb_im.getpixel((x, y))
        if (r,g,b) == colour:
            print(f"Found {colour} at {x},{y}!")

Но getpixel может быть медленным , поэтому обратите внимание на использование объектов доступа к пикселям .

Также обратите внимание, что возвращаемое значение может зависеть от типа изображения. Например, одно значение возвращается с pix[1, 1], поскольку пиксели GIF ссылаются на одно из 256 значений в цветовой палитре GIF.

См. Также этот пост SO: Значения пикселей Python и PIL, отличающиеся для GIF и JPEG , и эта справочная страница PIL содержит дополнительную информацию о функции convert().

Кстати, ваш код будет отлично работать для .jpg изображений.

...