如何用Python在Matlab中显示图片

时间:2017-01-12 04:23:51

标签: python matlab numpy matplotlib octave

这是20 x 20 zerozero像素图像,该图像存储在400大小的数组中:

X[0,:] = [255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
          255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
          255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
          255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
          255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 254
          254 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 254 246
          232 206 206 246 254 255 255 255 255 255 255 255 255 255 255 255 255 255
          246 182 132 132 132 161 206 232 254 255 255 255 255 255 255 255 255 255
          255 254 206 132 132 132 132 132 132 182 246 255 255 255 255 255 255 255
          255 255 255 254 206 132 132 161 182 161 132 161 232 255 255 255 255 255
          255 255 255 255 255 254 182 132 161 232 246 182 132 161 232 255 255 255
          255 255 255 255 255 255 255 246 182 132 182 246 246 182 132 182 246 255
          255 255 255 255 255 255 255 255 255 246 182 132 182 254 232 161 132 206
          254 255 255 255 255 255 255 255 255 255 255 246 182 132 182 246 206 132
          161 232 254 255 255 255 255 255 255 255 255 255 255 246 182 132 161 206
          161 132 182 246 255 255 255 255 255 255 255 255 255 255 255 254 206 132
          132 132 132 132 206 254 255 255 255 255 255 255 255 255 255 255 255 255
          232 182 161 132 132 182 232 254 255 255 255 255 255 255 255 255 255 255
          255 255 254 246 232 206 206 232 254 255 255 255 255 255 255 255 255 255
          255 255 255 255 255 255 254 254 254 255 255 255 255 255 255 255 255 255
          255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
          255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
          255 255 255 255]

在Matlab中,我可以使用此图片displayData(X(0,:))命令查看此图片。

另外,使用以下命令:

% Randomly select 100 data points to display
sel = randperm(size(X, 1));
sel = sel(1:100);
displayData(X(sel, :));

我可以显示不同的数字图片,如:

A lot of pictures

Machine Learning

我尝试使用以下代码在Python中执行相同的操作:

import matplotlib.pyplot as plt
plt.imshow(X[0, :])
plt.show()

但是,它抛出了这个错误:Output: TypeError: Invalid dimensions for image data

2 个答案:

答案 0 :(得分:5)

numpy数组通常用于保存matplotlib中的绘图数据,因此最容易在灰度图像字节中读取到numpy数组,告诉你的numpy数组形状

然后还有更多的情节设置

import numpy as np
import matplotlib.pyplot as plt

zstr = '255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 254 254 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 254 246 232 206 206 246 254 255 255 255 255 255 255 255 255 255 255 255 255 255 246 182 132 132 132 161 206 232 254 255 255 255 255 255 255 255 255 255 255 254 206 132 132 132 132 132 132 182 246 255 255 255 255 255 255 255 255 255 255 254 206 132 132 161 182 161 132 161 232 255 255 255 255 255 255 255 255 255 255 254 182 132 161 232 246 182 132 161 232 255 255 255 255 255 255 255 255 255 255 246 182 132 182 246 246 182 132 182 246 255 255 255 255 255 255 255 255 255 255 246 182 132 182 254 232 161 132 206 254 255 255 255 255 255 255 255 255 255 255 246 182 132 182 246 206 132 161 232 254 255 255 255 255 255 255 255 255 255 255 246 182 132 161 206 161 132 182 246 255 255 255 255 255 255 255 255 255 255 255 254 206 132 132 132 132 132 206 254 255 255 255 255 255 255 255 255 255 255 255 255 232 182 161 132 132 182 232 254 255 255 255 255 255 255 255 255 255 255 255 255 254 246 232 206 206 232 254 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 254 254 254 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255'    

z, z.shape = np.array([int(i) for i in zstr.split(' ')]), (20,20)

fig, ax = plt.subplots()
ax.imshow(z, cmap=plt.cm.gray, interpolation='nearest')
# interpolation=None uses a smoother default interpolatiopn
plt.show()

enter image description here

答案 1 :(得分:0)

要在一个块中显示多个图像(例如在您的问题的示例中),我使用下面的代码。 X4是图像尺寸为32x32的数据,我显示10X10图像:

images_100=None
for i in range(10):
  row=None
  for j in range(10):
    if row is not None:
      row=np.concatenate((row,np.reshape(X4[i*j+i+j],(32,32)).T),axis=1)
    else:
      row=np.reshape(X4[i*j+i+j],(32,32)).T
  if images_100 is not None:
    images_100=np.concatenate((images_100,row))
  else:
    images_100=row
plt.imshow(images_100, cmap=plt.cm.gray) 

enter image description here