pyplot.imshow()
功能如何运作?
我有一个维度(20, 400)
的矩阵。矩阵包含20个图像'每个图像大小为(20px, 20px)
的小数像素值(可以看作上面矩阵的第二维)。
然后将此矩阵输入pyplot.imshow()
,cmap
选为gray
。我不确定该函数是将图像矩阵的第二维元素视为一个完整图像,还是将图像分布考虑为(20x20)
。我试着搜索函数如何获取输入矩阵并使用它绘制像素。
我已经完成了文档,但没有运气。在使用之前了解实现非常重要。
答案 0 :(得分:3)
如果我理解您的情况,pyplot.imshow()
对您的个人图片尺寸一无所知,就像您现在所拥有的那样。它会将矩阵视为单个图像的像素值,尺寸为20像素乘400像素,因为这是矩阵的形状。例如:
import numpy as np
import matplotlib.pyplot as plt
''' Create a matrix of random values, of shape (20,400)
I used random integer values here between 0 and 255
but you can do the same for decimal pixel intensities '''
mat = np.random.randint(0,255,400*20).reshape(20,400)
# Call imshow:
plt.imshow(mat, cmap='gray')
plt.show()
给你这张图片:
由于您的20x20图像基本上存储在矩阵的第二维中,因此您可以以20x20格式显示单个图像(但显然必须重新整形),如下所示:
plt.imshow(mat[0,:].reshape(20,20), cmap='gray')
plt.show()
这将返回第一张图片:
对于第二张图片,请使用mat[1,:].reshape(20,20)
等...
[编辑] :要了解imshow()
如何逐行绘制图像,请考虑以下矩阵,其中像素强度正在稳步下降:
example_mat = np.linspace(1,0, 25).reshape(5,5)
>>> example_mat
array([[ 1. , 0.95833333, 0.91666667, 0.875 , 0.83333333],
[ 0.79166667, 0.75 , 0.70833333, 0.66666667, 0.625 ],
[ 0.58333333, 0.54166667, 0.5 , 0.45833333, 0.41666667],
[ 0.375 , 0.33333333, 0.29166667, 0.25 , 0.20833333],
[ 0.16666667, 0.125 , 0.08333333, 0.04166667, 0. ]])
如果您在此矩阵上调用imshow()
,则会显示以下图片:
正如你所看到的,第一个"行"您的矩阵(example_mat[0,:]
)是第一个(即顶部)"行"你的形象。