我想擾亂圖像中的所有像素,我的Knuths shuffle(以及其他人)的實現似乎失敗。似乎它正在做每一行。我無法弄清楚爲什麼 - 只是看不到它。Python圖像洗牌失敗 - 我哪裏出錯了?
這裏是發生了什麼:
這是不是很scrambly!那麼,它可能會更加瘋狂,而且還需要更多的抓鬥。
這裏是我的代碼:
import Image
from numpy import *
file1 = "lhooq"
file2 = "kandinsky"
def shuffle(ary):
a=len(ary)
b=a-1
for d in range(b,0,-1):
e=random.randint(0,d)
ary[d],ary[e]=ary[e],ary[d]
return ary
for filename in [file1, file2]:
fid = open(filename+".jpg", 'r')
im = Image.open(fid)
data = array(im)
# turn into array
shape = data.shape
data = data.reshape((shape[0]*shape[1],shape[2]))
# Knuth Shuffle
data = shuffle(data)
data = data.reshape(shape)
imout = Image.fromarray(data)
imout.show()
fid.close()
那蒙娜麗莎似乎有鬍子。此外,在'shuffle'中,您正在遍歷圖像中的每一行。嘗試'將圖像重塑成一維數組,然後洗牌。 – Blender
IIRC'形狀'將會是'(高度,寬度,通道)',所以他的'重塑'應該已經變平了。 – nneonneo
這是馬塞爾杜尚的LHOOQ。 http://en.wikipedia.org/wiki/L.H.O.O.Q。行數據= data.reshape((形狀[0] *形狀[1],形狀[2]))應該做你說的。我想打亂像素位置而不是它們的顏色。 – Lucas