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.