Деформация изображения Python PIL / аффинные преобразования

#python #python-imaging-library

#python #python-imaging-library

Вопрос:

Используя Python PIL, я хочу преобразовать входные изображения таким образом, чтобы они выглядели в перспективе. Большинство ответов, которые я нашел, Касаются поворота и т. Д. На изображениях ниже показан один из эффектов, к которым я стремлюсь. Аналогично я хотел бы сделать это не только спереди назад, но и слева направо и наоборот. Еще один эффект, который я хотел бы, — это деформировать изображение таким образом, чтобы центр был ближе, а края — дальше.

Как я должен позвонить im.transform , чтобы получить этот эффект? И почему?

Входное изображение:

Входное изображение

Эффект вывода:

Вывод изображения

Ответ №1:

Я полагаю, что вы ищете перспективные преобразования. Вы можете сделать это с помощью Pillow следующим образом:

 transformed = image.transform(
    image.size, Image.PERSPECTIVE,
    [
        a0, a1, a2, 
        a3, a4, a5,
        a6, a7
    ],
    Image.BILINEAR
)
  

Где a0-a7 — коэффициенты, используемые для преобразования таким образом (из источников, Geometry.c):

 xout = (a0 * xin   a1 * yin   a2) / (a6 * xin   a7 * yin   1);
yout = (a3 * xin   a4 * yin   a5) / (a6 * xin   a7 * yin   1);
  

Комментарии:

1. Интересно. Но какие значения требуются для приведенного выше эффекта?

2. Или лучше, как перевести 3D-проекции в этот 2D-ввод