аффинное преобразование в PIL Python - PullRequest
4 голосов
/ 21 сентября 2011

У меня проблемы с методом im.transform в библиотеке Python PIL.Я думал, что выяснил логику параметров, от 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

1 Ответ

9 голосов
/ 07 октября 2011

преобразование прекрасно работает для меня. В качестве примера мы повернем изображение вокруг центра, отличного от (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)

Надеюсь, это поможет. Дайте мне знать, если нет.

Приветствия, Филипп.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...