Повышение масштаба при трансформации перспективы с помощью PIL - PullRequest
0 голосов
/ 24 мая 2018

Я использую функцию преобразования изображения в 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)

original image

преобразование без увеличения разрешения отлично работает

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)

transformed image without increasing the resolution

Но если я хочу увеличить разрешение, возникает странное поведение PIL - размер изображения не изменяется до конечного размера холста

imgNew2=img.transform((1500, 1500), Image.PERSPECTIVE, coeffs,
    Image.BICUBIC)
imgNew2.save('imgNew2.jpg')
plt.imshow(imgNew2)

transformed image with increased resolution

Есть идеи, как решить эту проблему без изменения размера изображения с помощью PIL.Image.resize до его преобразования?

...