2011-09-21 94 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