使用PIL进行非仿射变换

时间:2013-10-02 16:58:32

标签: python python-imaging-library transformation

我有一个矩形图像(O),我想将它包装成一个圆圈(I)。基本上我想采用两个笛卡尔轴xy并将它们映射到极坐标φr,以便I(φ,r) = O(f(φ),g(r))f }和g线性函数。

我在PIL中找到Image.transform方法,但在阅读the documentation时,这只适用于仿射变换矩阵。

1。可以用“仿射变换”将“将矩形包裹成一个圆”吗?我不担心。

2。我还能怎样做到这一点?

1 个答案:

答案 0 :(得分:1)

根据martineau的说法,在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) ) )