Как изменить альфа-канал раздела пикселей на моем изображении? - PullRequest
0 голосов
/ 11 февраля 2019

Я пытаюсь обрезать изображение (обрезать фон из школьной картинки), используя matplotlib, os.path и numpy.

Моя идея состояла в том, чтобы разделить изображение на квадратыкроме той части, которая мне была нужна, а затем манипулировал альфа-каналом, чтобы сделать эти области прозрачными, так что все, что мне осталось, - это та часть, которая мне нужна.У меня есть начало кода, но я застрял в том же сообщении об ошибке.

Я пытался создать некую круговую маску, чтобы обрезать лицо, но концепция маски мне все еще чужда, поэтомуЯ подумал, что это будет проще.

fig, ax = plt.subplots(1, 1)
# Show the image data in a subplot
ax.imshow(img, interpolation='none')
# Show the figure on the screen

row = len(img)
column = len(img[0])
for row in range(0, 231) :
    for column in range(0, 330) :
        img[row][column] = [0, 0, 0, 0]


fig.show()

Results: 26 for row in range(0, 231) :
         27     for column in range(0, 330) :
    ---> 28         img[row][column] = [0, 0, 0]
         29 
         30 
IndexError: index 288 is out of bounds for axis 0 with size 288

1 Ответ

0 голосов
/ 11 февраля 2019

С PIL / Pillow вам будет намного проще.Начиная с этого изображения Фионы ...

enter image description here

#!/usr/bin/env python3

from PIL import Image, ImageDraw

# Load image and get width and height
im = Image.open('fiona.png').convert('RGB')
w, h = im.size[0:2]

# Make empty black alpha mask same size, but with just one channel, not RGB
alpha = Image.new('L',(w,h))

# Draw white ellipse in mask - everywhere we paint white the original image will show through, everywhere black will be masked
draw = ImageDraw.Draw(alpha)
draw.ellipse([80,100,210,210],fill=255) 

# Add alpha mask to image and save
im.putalpha(alpha)
im.save('result.png')

enter image description here

Вотальфа-маска, которую мы создали:

enter image description here

...