2013-10-02 17 views
0

У меня есть прямоугольное изображение (O), и я хочу обернуть его по кругу (I). В принципе, я хочу взять две декартовой оси x и y и сопоставить их с полярными координатами φ и r, так что I(φ,r) = O(f(φ),g(r)) является f и g линейными функциями.Неаффинная трансформация с PIL

Я нашел в PIL метод Image.transform, но поскольку я читал the documentation, это работает только с аффинными матрицами преобразования.

1. Можно ли это «обернуть прямоугольник в круг» с помощью аффинного преобразования? Не боюсь.

2. Как еще я могу это достичь?

+0

Вам придется написать свой собственный код обработки изображений, возможно, не в Python с PIL или без него, или использовать какой-либо другой предварительно написанный модуль, который может делать то, что вы хотите. – martineau

ответ

0

В соответствии с Мартино нет такой функциональности в PIL, я должен был осуществить это сам:

Будучи overlay декартово изображений и circle полярных изображения.

for x in range (800): 
    for y in range (800): 
     r = ((x - 400) ** 2 + (y - 400) ** 2) ** .5 
     phi = math.atan2 (float (y - 400), float (x - 400)) 
     tx = int (phi * 1200.0/2.0/math.pi + 300) % 1200 
     ty = int ((r - 100.0) * 350.0/250.0) 
     if 100 < r < 350: circle.putpixel ((x, y), overlay.getpixel ((tx, ty))) 
Смежные вопросы