Я использую функцию преобразования изображения в PIL в соответствии с Как работает перспективное преобразование в PIL? , которая работает нормально.Единственное, что не работает, это увеличение разрешения результирующего изображения.
import numpy as np
import matplotlib.pyplot as plt
from PIL import Image
imgData=plt.imread('img.jpg')
print imgData.shape
img=Image.fromarray(imgData)
plt.imshow(img)
преобразование без увеличения разрешения отлично работает
def find_coeffs(pa, pb):
matrix = []
for p1, p2 in zip(pa, pb):
matrix.append([p1[0], p1[1], 1, 0, 0, 0, -p2[0]*p1[0], -p2[0]*p1[1]])
matrix.append([0, 0, 0, p1[0], p1[1], 1, -p2[1]*p1[0], -p2[1]*p1[1]])
A = np.matrix(matrix, dtype=np.float)
B = np.array(pb).reshape(8)
res = np.linalg.solve(A, B)
return np.array(res).reshape(8)
coeffs = find_coeffs(
[(0, 0), (256, 0), (256, 256), (0, 256)],
[(0, 0), (256, 0), (100, 200), (10, 200)])
imgNew=img.transform((256, 256), Image.PERSPECTIVE, coeffs,
Image.BICUBIC)
plt.imshow(imgNew)
Но если я хочу увеличить разрешение, возникает странное поведение PIL - размер изображения не изменяется до конечного размера холста
imgNew2=img.transform((1500, 1500), Image.PERSPECTIVE, coeffs,
Image.BICUBIC)
imgNew2.save('imgNew2.jpg')
plt.imshow(imgNew2)
Есть идеи, как решить эту проблему без изменения размера изображения с помощью PIL.Image.resize до его преобразования?