2013-10-02 44 views
0

我有一个矩形图像(O),我想将它包装成圆形(I)。基本上我想把两个笛卡尔坐标轴xy映射到极坐标φr,这样I(φ,r) = O(f(φ),g(r))就是fg的线性函数。使用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)))