Python PIL удаляет разделы изображения в зависимости от его цвета

Я пытаюсь использовать PIL в Python для удаления частей изображений на основе значений RGB пикселей. Из документации может показаться, что функциональная точка может делать то, что я ищу. Однако мне трудно следить за документацией. Если бы я хотел изменить все пиксели, у которых значение синего цвета меньше 100, на белый, что было бы самым простым способом добиться этого?

2 ответа

Решение

Будет работать что-то вроде следующего:

source = im.split()
mask = source[2].point(lambda i: i < 100 and 255)
im = Image.merge(im.mode, source)

См. Учебное пособие PIL под заголовком " Операции с точками" для получения дополнительной информации.

Я думаю, что самый простой способ сделать это - использовать библиотеку Mahotas, которая позволяет загружать изображения в виде NumPy ndarrays. Тогда вы можете просто использовать логическое индексирование на вашем изображении.

 import Mahotas as mh
 import numpy as np

 fname = "/home/stuff/images/my_image.jpg"
 image = mh.imread(fname)

 # Make a copy to play with the indices.
 img = np.copy(image)

 # Replace places with 3rd coordinate less than 100 with the white-color
 # vector [255, 255, 255].
 inds = img[:,:,2] < 100
 img[inds] = [255,255,255]

Преимущество заключается в том, что Mahotas загружает изображение прямо в массив Numpy, что позволяет легко разделять различные измерения в согласованном синтаксисе NumPy. В качестве альтернативы, если вы действительно хотите выполнить ввод / вывод изображения с помощью PIL, вам следует искать функции в PIL, которые позволяют преобразовывать изображение в массив NumPy, и тогда приведенный выше код будет работать.

В общем, у меня всегда были постоянные проблемы, чтобы заставить PIL по-настоящему работать. Кажется, всегда есть какая-то проблема с поддержкой типа файла изображения, какая-то проблема с декодером или что-то другое, что происходит с PIL. Это очень суетливо. Я обычно стараюсь избегать Python-OpenCV по той же причине. Я предпочитаю рабочий процесс с scikits.learn, scikits.image, Mahotas и PyPNG.

Другие вопросы по тегам