将numpy数组(行形式)转换为图像

时间:2015-02-28 04:34:05

标签: python numpy pandas matplotlib scipy

我有一个28x11105的numpy ndarry。每行是105x105图像RGB值。所以基本上每行都是一个图像,因此我有28个这样的图像(28行)。

我想通过这样做来检查我是否可以转换第一张图像(然后是其他图片):

plt.imshow(X[0,:], interpolation='nearest'). 

其中X是如上所述的颠簸的ndarry。

它说,尺寸对于图像是错误的。如何将描绘图像所有像素值的每一行转换为等效图像。

编辑:

我原来的形象就是这样说: enter image description here

在对此图像的像素值使用上述imshow后我得到的是:

enter image description here

我的数据矩阵再次如上所述。 28x11025。每行是图像的105x105像素值。

EDIT2:

我使用了np.rot,然后再次绘制。也做了grey_r。因此,当_r现在翻转颜色并给出正确的颜色时,腐烂的东西会产生如下问题。我的Xt是28x11025矩阵。所以28个图像的像素值。我目前正在检查第一行或第一张图像的绘图代码。最终将绘制所有28个图像,因此将删除Xt2上的索引。

Xt2=np.rot90(Xt)
plt.imshow(Xt2[0,:].reshape(105,105), interpolation='nearest',cmap=cm.Greys_r)

>>>
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-186-12e4a649eaf2> in <module>()
     48 #plt.imshow(Xt[0,:].reshape(105,105), interpolation='nearest',cmap=cm.Greys)
     49 Xt2=np.rot90(Xt)
---> 50 plt.imshow(Xt2[0,:].reshape(105,105), interpolation='nearest',cmap=cm.Greys_r)
     51 
     52 

ValueError: total size of new array must be unchanged

EDIT3:

因此,我使用Transpose而不是腐烂。像这样:

plt.imshow(Xt [0,:]。reshape(105,105).T,interpolation ='nearest',cmap = cm.Greys_r)它给了我正确的翻转输出。 (不要带着微笑的模糊性。这是增加噪点的图像)。

enter image description here

现在要打印这个矩阵的所有28个图像,我正在运行for循环。

for x in range(20):
    plt.imshow(Xt[x,:].reshape(105,105).T,interpolation='nearest',cmap=cm.Greys_r)

但问题是,我希望所有28张图片都是笔记本中的并排图像。一直走到笔记本的宽度,然后继续在另一条线上。但这基本上将图像绘制在前一个图像之上,因此它只显示最后一个图像。我该如何纠正这个问题?

1 个答案:

答案 0 :(得分:1)

通常,解开图像数组的方法是:

ims = X.reshape(28, 105, 105)

如果每行的长度为11025,每个像素的值为:

ims = X.reshape(28, 105, 105, 3)

如果每行包含11025像素中每一个的RGB值序列。但是,您声明每行的长度值为11105,这与其中任何一行都不匹配...您的数据究竟是如何打包到数组X中的?

编辑:请注意,如果您看到颜色,您可能正在查看Matplotlib的图像默认颜色图。要显示灰度图像,请使用:

import matplotlib.cm as cm
plt.imshow(ims[0], cmap=cm.Greys)

等。 您可以在上面的参数_r中附加cm.Greys_rcmap来使用倒置的色彩图(您似乎需要)。如果您的图像看起来颠倒或需要旋转,请考虑其中一个或两个

im2 = np.rot90(im)
im2 = np.flipud(im)