0

我有一个矩形图像 ( O),我想把它包成一个圆圈 ( I)。基本上我想取两个笛卡尔轴x并将y它们映射到极坐标φr,所以I(φ,r) = O(f(φ),g(r))存在fg线性函数。

我在 PIL 中找到了该Image.transform方法,但是当我阅读文档时,这仅适用于仿射变换矩阵。

1. 这个“把一个矩形包成一个圆”可以用仿射变换完成吗?我不怕。

2. 我还能如何做到这一点?

4

1 回答 1

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) ) )
于 2013-10-02T18:21:07.947 回答