LINUX.ORG.RU

Портится изображение при наложении на задний фон

 ,


0

1

https://dropmefiles.com/KeLNk

Почему при наложении weather на background размываются пиксели weather?

Кот:

from PIL import Image

image = Image.open('background.jpg')
front = Image.open('weather.png')
image.paste(front)
image.save('test.png')

Та же самая проблема повторяется в библиотеке cv2

А вот и ответ:

from PIL import Image

front = Image.open('weather.png')
back = Image.open('background1.png')

front.load()
back.paste(front, mask=front.split()[3])

back.save('result.png')
★★★★★

Последнее исправление: steemandlinux (всего исправлений: 2)

Ответ на: комментарий от maxim2

Мне альфа канал и нужен чтобы его с фоном соединить. Белый фон просто для примера. А что за box?

steemandlinux ★★★★★
() автор топика

Ура, я сделал эту срань. Конвертим фон в RGBA 8 bit и применяем эту копипасту:

 def alpha_composite(front, back): """Alpha composite two RGBA images.

Source: http://stackoverflow.com/a/9166671/284318

Keyword Arguments:
front -- PIL RGBA Image object
back -- PIL RGBA Image object

"""
front = np.asarray(front)
back = np.asarray(back)
result = np.empty(front.shape, dtype='float')
alpha = np.index_exp[:, :, 3:]
rgb = np.index_exp[:, :, :3]
falpha = front[alpha] / 255.0
balpha = back[alpha] / 255.0
result[alpha] = falpha + balpha * (1 - falpha)
old_setting = np.seterr(invalid='ignore')
result[rgb] = (front[rgb] * falpha + back[rgb] * balpha * (1 - falpha)) / result[alpha]
np.seterr(**old_setting)
result[alpha] *= 255
np.clip(result, 0, 255)
# astype('uint8') maps np.nan and np.inf to 0
result = result.astype('uint8')
result = Image.fromarray(result, 'RGBA')
return result
steemandlinux ★★★★★
() автор топика

А вот и нормальный вариант без всяких подготовок изображений и кучи кода:

from PIL import Image

image = Image.open('weather.png')
back = Image.open('background1.png')

image.load()
back.paste(image, mask=image.split()[3])

back.save('result.png')
steemandlinux ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.