PIL python中的仿射变换

问题描述 投票:5回答:1

我在PIL python库中的im.transform方法遇到问题。我以为我已经弄清楚了参数A到F的逻辑,但是,尽管波纹管功能计算出的所有四个角都具有正确的正值,但最终得到的图像却朝错误的方向旋转并被切除。

有人可以给我公式从两个坐标系中的三个相同点计算仿射参数(从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
python-imaging-library affinetransform
1个回答
12
投票

转换对我来说很好。作为示例,我们将绕着与(0,0)不同的中心旋转图像,并具有可选的缩放比例和平移到新的中心。这是使用transform的方法:

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)
© www.soinside.com 2019 - 2024. All rights reserved.