Если я правильно понял, вы хотите, чтобы сделать некоторую область прозрачна в пределах изображения. И эти области имеют случайную форму. Самый простой способ (я могу придумать) - создать маску и поместить ее в альфа-канал изображения. Ниже приведен код, который показывает, как это сделать.
Если ваш вопрос «Как создать полигон маски» Я перенаправит вас:
SciPy Create 2D Polygon Mask
и посмотреть принятый ответ.
уш,
Юха
import numpy
import Image
# read image as RGB and add alpha (transparency)
im = Image.open("lena.png").convert("RGBA")
# convert to numpy (for convenience)
imArray = numpy.asarray(im)
# create mask (zeros + circle with ones)
center = (200,200)
radius = 100
mask = numpy.zeros((imArray.shape[0],imArray.shape[1]))
for i in range(imArray.shape[0]):
for j in range(imArray.shape[1]):
if (i-center[0])**2 + (j-center[0])**2 < radius**2:
mask[i,j] = 1
# assemble new image (uint8: 0-255)
newImArray = numpy.empty(imArray.shape,dtype='uint8')
# colors (three first columns, RGB)
newImArray[:,:,:3] = imArray[:,:,:3]
# transparency (4th column)
newImArray[:,:,3] = mask*255
# back to Image from numpy
newIm = Image.fromarray(newImArray, "RGBA")
newIm.save("lena3.png")
Редактировать
На самом деле, я не мог сопротивляться ... решение многоугольник маска была настолько элегантна (заменить выше круг с этим):
# create mask
polygon = [(100,100), (200,100), (150,150)]
maskIm = Image.new('L', (imArray.shape[0], imArray.shape[1]), 0)
ImageDraw.Draw(maskIm).polygon(polygon, outline=1, fill=1)
mask = numpy.array(maskIm)
Редактировать2
Теперь, когда я думаю об этом. Если у вас есть черно-белый svg, вы можете загрузить свой svg напрямую в качестве маски (если белый - ваша маска). У меня нет образцов svg-изображений, поэтому я не могу это проверить. Я не уверен, может ли PIL открывать svg-изображения.
В этом примере не будет возможности программно удалить башни, крыши и полюса без сложного подхода к компьютерному видению. Лучше всего сделать это вручную. И что именно вы хотите исключить из черных областей? Цифровые изображения прямоугольные - вы хотите сделать их прозрачными? Что касается ImagePath, Path создается просто из списка координат, и я уверен, что вы могли бы получить эту информацию из SVG-файла с помощью некоторой библиотеки SVG для python. –
Чтобы сделать все, о чем вы просите, PIL недостаточно, поскольку для обработки изображений не существует очень фундаментальных инструментов. Вы могли бы построить их самостоятельно, используя Python, если у вас достаточно времени, но, учитывая, как сформулирован вопрос, я подозреваю, что у вас возникнут проблемы с этим. Единственная помощь, которую я могу дать, - указать, что вам нужно лучше понять вашу проблему и сразу задать один вопрос. – mmgp