我根据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)
转换而不增加分辨率可以正常工作
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调整图像大小的情况下如何解决这个问题?