2011-09-21 62 views
4

我在PIL python库中的im.transform方法有问题。我想我已经找出了参数的逻辑,A到F,然而,由于波纹管函数计算出来的所有四个角都有正确的正值,所以得到的图像会以错误的方向旋转并切断。PIL仿射变换python

有人可以给我公式来计算仿射参数(A到F)从三个相同的点在两个坐标系?

def tran (x_pic, y_pic, A, B, C, D, E, F): 
    X = A * x_pic + B * y_pic + C 
    Y = D * x_pic + E * y_pic + F 
    return X, Y 

回答

8

变换适用于我。作为一个例子,我们将围绕一个不同于(0,0)的中心旋转图像,可选择缩放并翻译成新的中心。这里是如何与变换:

def ScaleRotateTranslate(image, angle, center = None, new_center = None, scale = None,expand=False): 
    if center is None: 
     return image.rotate(angle) 
    angle = -angle/180.0*math.pi 
    nx,ny = x,y = center 
    sx=sy=1.0 
    if new_center: 
     (nx,ny) = new_center 
    if scale: 
     (sx,sy) = scale 
    cosine = math.cos(angle) 
    sine = math.sin(angle) 
    a = cosine/sx 
    b = sine/sx 
    c = x-nx*a-ny*b 
    d = -sine/sy 
    e = cosine/sy 
    f = y-nx*d-ny*e 
    return image.transform(image.size, Image.AFFINE, (a,b,c,d,e,f), resample=Image.BICUBIC) 

希望有所帮助。如果不是,请告诉我。

干杯,菲利普。

+0

与此同时,我想通了。我也会尝试一下你的例子。谢谢 – Matej