Kel*_*mie 3 python image image-processing
我是计算视觉和Python的新手,我无法真正弄清楚出了什么问题。我尝试随机化 RGB 图像中的所有图像像素,但结果证明我的图像完全错误,如下所示。有人可以解释一下吗?
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()
%matplotlib inline
#Display out the original RGB image
plt.figure(1,figsize = (6, 4))
plt.imshow(rgbImg)
plt.show()
#Initialise a new array of zeros with the same shape as the selected RGB image
rdmImg = np.zeros((rgbImg.shape[0], rgbImg.shape[1], rgbImg.shape[2]))
#Convert 2D matrix of RGB image to 1D matrix
oneDImg = np.ravel(rgbImg)
#Randomly shuffle all image pixels
np.random.shuffle(oneDImg)
#Place shuffled pixel values into the new array
i = 0
for r in range (len(rgbImg)):
for c in range(len(rgbImg[0])):
for z in range (0,3):
rdmImg[r][c][z] = oneDImg[i]
i = i + 1
print rdmImg
plt.imshow(rdmImg)
plt.show()
Run Code Online (Sandbox Code Playgroud)
np.ravel()你不是在打乱像素,而是在使用时和之后打乱一切np.shuffle()。
当你打乱像素时,你必须确保颜色、RGB 元组保持不变。
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()
Run Code Online (Sandbox Code Playgroud)
这是随机的浣熊,注意颜色。那里没有红色或蓝色。只是原来的,白色,灰色,绿色,黑色。
我删除的代码还存在一些其他问题:
不要使用嵌套的for循环,速度慢。
np.zeros不需要预分配(如果您需要它,只需rgbImg.shape作为参数传递,无需解压单独的值)
| 归档时间: |
|
| 查看次数: |
5241 次 |
| 最近记录: |