2017-04-20 48 views
0

我想將矩形圖像轉換爲方形圖像。 但是,我有問題。將矩形圖像重新整形爲方形

我的審判Python代碼是在這裏:

from PIL import Image 
import numpy as np 

im = Image.open('aa.png') 
pixMap = im.load() 

img = Image.new(im.mode, im.size) 
sqrWidth = np.ceil(np.sqrt(im.size[0]*im.size[1]) 

pixNew = Image.new(im.mode, (im.size[0]*im.size[1], 1)) 
pixSave = Image.new(im.mode, (sqrWidth, sqrWidth)) 

k=0 
for i in range(img.size[0]): 
    for j in range(img.size[1]): 
     pixNew[k] = pixMap[i, j] 
     k=k+1 

k=0 
for i in range(sqrWidth): 
    for j in range(sqrWidth): 
     pixSave[i, j] = pixNew[k] 
     k=k+1 

im.close() 
img.show()  
img.save("out.png") 
img.close() 

我的錯誤是在這裏:

Traceback (most recent call last): 
    File "rect2square.py", line 13, in <module> 
    pixNew[k] = pixMap[i, j] 
    File "/usr/lib/python2.7/dist-packages/PIL/Image.py",  line 528, in __getattr__ 
raise AttributeError(name) 
AttributeError: __setitem__ 

有什麼不對?

回答

0

您可以在PIL中使用調整大小圖像過濾器。

from PIL import Image 
import numpy as np 

im = Image.open('image.png') 
sqrWidth = np.ceil(np.sqrt(im.size[0]*im.size[1])).astype(int) 
im_resize = im.resize((sqrWidth, sqrWidth)) 
im_resize.save('output.png') 

這會將你的圖像擠壓成一個正方形。這是你想要的嗎?

輸入圖像

input

輸出圖像

output

+0

不,這不是我想要的..我的目標不是一個拉伸但重新數據序列。非常感謝〜。 –

+0

數據序列重塑的含義是什麼? – Robbie

+0

像這樣:[1234,5678] - > [123,456,780] ...與零填充的正方形。謝謝。 –

0

如果您正在尋找保持形狀原始圖像的,仍然使其成爲一個正方形,可以考慮添加填充使它是一個正方形,然後調整大小爲羅比建議

+0

這不是一個答案。你正在做一個評論般的建議。 [看](https://stackoverflow.com/help/how-to-answer)如何發佈答案! – Zico

+0

我認爲這應該是一個評論,而不是一個答案。 –