Я хотел бы проиллюстрировать пример, используя ответ @unutbu. В этом сценарии у меня есть изображение кошки, которую я вращаю. Это вращение вызывает появление черных краев, которые выглядят некрасиво, особенно при вставке на не черный фон.
import matplotlib.pyplot as plt
from scipy.ndimage import rotate
cat = plt.imread('cat.jpeg')
bg = plt.imread('background.jpeg')
rotcat = rotate(cat, angle=8, reshape=True) ## rotating creates some black edges
height, width, _ = rotcat.shape
bgcopy = bg.copy() ## create a copy of the background; paste on copy
x, y = 40, 50
bgcopy[x:x+height, y:y+width] = rotcat
plt.imsave('cat-on-bg-mask.jpg', bgcopy)
![bad pasting](https://i.stack.imgur.com/ag9cZ.jpg)
Итак, я нахожу области маски и заменяю эти значения исходными значениями фона
mask_ind = (bgcopy == 0)
bgcopy[mask_ind] = bg[mask_ind]
plt.imsave('cat-on-bg.jpg', bgcopy)
![good pasting](https://i.stack.imgur.com/msSNl.jpg)
Следует также отметить, что PIL.Image
(из библиотеки Pillow
) имеет возможность вставлять изображение в другое изображение за меньшее количество шагов.