Я могу использовать аффинное преобразование, чтобы перевести изображение обычным способом. Чего я не смог понять, так это того, как заставить вновь добавленные пиксели по краям копировать значение края, которое уже было, вместо того, чтобы по умолчанию равняться 0.
Например, Left
В случае ниже должны быть желтые пиксели справа от блока, а в случае Up
должны быть желтые ниже. Есть ли способ выполнить sh это с помощью аффинного преобразования или другого метода из Pillow?
введите описание изображения здесь
import matplotlib.pyplot as plt
from PIL import Image
import numpy as np
image_size = (10, 10)
def translate(img, x, y):
"""Shift the image right x pixels and up y pixels."""
return img.transform(img.size, Image.AFFINE, (1, 0, -x, 0, 1, y))
# generate a pattern
data = np.zeros(image_size)
for i, x in enumerate(data):
for j, y in enumerate(x):
if i >= image_size[0] / 2 and j >= image_size[1] / 2:
data[i][j] = 255
im = Image.fromarray(data)
im = im.convert("L")
plt.subplot(321)
plt.title("Base")
plt.imshow(im)
plt.subplot(323)
plt.title("Left")
plt.imshow(translate(im, -1, 0))
plt.subplot(324)
plt.title("Right")
plt.imshow(translate(im, 1, 0))
plt.subplot(325)
plt.title("Up")
plt.imshow(translate(im, 0, 1))
plt.subplot(326)
plt.title("Down")
plt.imshow(translate(im, 0, -1))
plt.tight_layout()
plt.show()