<p>你不是在洗牌像素,而是在之后使用<code>np.ravel()</code>和<code>np.shuffle()</code>时对所有像素进行洗牌。在</p>
<p>当你洗牌像素,你必须确保颜色,RGB元组,保持不变。在</p>
<pre><code>from scipy import misc
import numpy as np
import matplotlib.pyplot as plt
#Loads an arbitrary RGB image from the misc library
rgbImg = misc.face()
#Display out the original RGB image
plt.figure(1,figsize = (6, 4))
plt.imshow(rgbImg)
plt.show()
# doc on shuffle: multi-dimensional arrays are only shuffled along the first axis
# so let's make the image an array of (N,3) instead of (m,n,3)
rndImg2 = np.reshape(rgbImg, (rgbImg.shape[0] * rgbImg.shape[1], rgbImg.shape[2]))
# this like could also be written using -1 in the shape tuple
# this will calculate one dimension automatically
# rndImg2 = np.reshape(rgbImg, (-1, rgbImg.shape[2]))
#now shuffle
np.random.shuffle(rndImg2)
#and reshape to original shape
rdmImg = np.reshape(rndImg2, rgbImg.shape)
plt.imshow(rdmImg)
plt.show()
</code></pre>
<p>这是随机浣熊,注意颜色。那里没有红色或蓝色。只有原来的,白色,灰色,绿色,黑色。在</p>
<p>{a1}</p>
<p>我删除的代码还有一些其他问题:</p>
<ul>
<li><p>不要使用嵌套for循环,慢。</p></li>
<li><p>不需要使用<code>np.zeros</code>的预分配(如果您需要它,只需将<code>rgbImg.shape</code>作为参数传递,不需要解压缩单独的值)</p></li>
</ul>