使用PIL进行透视转换时进行升级

时间:2018-05-24 12:32:55

标签: python image-processing python-imaging-library

我根据How does perspective transformation work in 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调整图像大小的情况下如何解决这个问题?

0 个答案:

没有答案