2013-10-02 72 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)))