我有一个28x11105的numpy ndarry。每行是105x105图像RGB值。所以基本上每行都是一个图像,因此我有28个这样的图像(28行)。
我想通过这样做来检查我是否可以转换第一张图像(然后是其他图片):
plt.imshow(X[0,:], interpolation='nearest').
其中X是如上所述的颠簸的ndarry。
它说,尺寸对于图像是错误的。如何将描绘图像所有像素值的每一行转换为等效图像。
编辑:
我原来的形象就是这样说:
在对此图像的像素值使用上述imshow后我得到的是:
我的数据矩阵再次如上所述。 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)它给了我正确的翻转输出。 (不要带着微笑的模糊性。这是增加噪点的图像)。
现在要打印这个矩阵的所有28个图像,我正在运行for循环。
for x in range(20):
plt.imshow(Xt[x,:].reshape(105,105).T,interpolation='nearest',cmap=cm.Greys_r)
但问题是,我希望所有28张图片都是笔记本中的并排图像。一直走到笔记本的宽度,然后继续在另一条线上。但这基本上将图像绘制在前一个图像之上,因此它只显示最后一个图像。我该如何纠正这个问题?
答案 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_r
:cmap
来使用倒置的色彩图(您似乎需要)。如果您的图像看起来颠倒或需要旋转,请考虑其中一个或两个
im2 = np.rot90(im)
im2 = np.flipud(im)