pyplot.imshow()函数如何工作?

时间:2018-03-22 17:18:55

标签: python image numpy matplotlib

pyplot.imshow()功能如何运作?

我有一个维度(20, 400)的矩阵。矩阵包含20个图像'每个图像大小为(20px, 20px)的小数像素值(可以看作上面矩阵的第二维)。

然后将此矩阵输入pyplot.imshow()cmap选为gray。我不确定该函数是将图像矩阵的第二维元素视为一个完整图像,还是将图像分布考虑为(20x20)。我试着搜索函数如何获取输入矩阵并使用它绘制像素。

我已经完成了文档,但没有运气。在使用之前了解实现非常重要。

1 个答案:

答案 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()

给你这张图片:

full matrix

由于您的20x20图像基本上存储在矩阵的第二维中,因此您可以以20x20格式显示单个图像(但显然必须重新整形),如下所示:

plt.imshow(mat[0,:].reshape(20,20), cmap='gray')
plt.show()

这将返回第一张图片:

enter image description here

对于第二张图片,请使用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

正如你所看到的,第一个"行"您的矩阵(example_mat[0,:])是第一个(即顶部)"行"你的形象。