【问题标题】:如何将 4d 数组保存到图像文件
【发布时间】:2022-01-23 06:51:44
【问题描述】:

我有以下 python 代码,它下载一组图像来训练模型...

from matplotlib import pyplot as plt
import numpy as np
import tensorflow as tf

(train_images, train_labels), (_, _) = tf.keras.datasets.mnist.load_data()

train_images = train_images.reshape(train_images.shape[0], 28, 28, 1).astype('float32')
train_images = (train_images - 127.5) / 127.5

print(str(type(train_images[0,0])))

for i in range(len(train_images)):
    plt.imsave('train_images\\' + str(train_labels[i]) + '.jpg', train_images[i, :])

我正在尝试将这些图像保存到文件中,我根据在收到有关尝试索引标量的错误消息之前可以索引它的次数确定这是一个 4d 数组。

PS C:\Users\David\Desktop\ai> python .\images.py
<class 'numpy.ndarray'>
Traceback (most recent call last):
  File "C:\Users\David\Desktop\ai\images.py", line 13, in <module>
    plt.imsave('train_images\\00' + str(train_labels[i]) + '.jpg', train_images[i, :])
  File "C:\python3.9.9\lib\site-packages\matplotlib\pyplot.py", line 2144, in imsave
    return matplotlib.image.imsave(fname, arr, **kwargs)
  File "C:\python3.9.9\lib\site-packages\matplotlib\image.py", line 1641, in imsave
    rgba = sm.to_rgba(arr, bytes=True)
  File "C:\python3.9.9\lib\site-packages\matplotlib\cm.py", line 434, in to_rgba
    raise ValueError("Third dimension must be 3 or 4")
ValueError: Third dimension must be 3 or 4
PS C:\Users\David\Desktop\ai>

谁能教我怎么做?

【问题讨论】:

    标签: python-3.x tensorflow keras


    【解决方案1】:

    我一问就找到了答案……最后一行应该是这样的:

    plt.imsave('train_images\\' + str(train_labels[i]) + '.jpg', train_images[i, :, :, 0])
    

    【讨论】:

      【解决方案2】:

      问题是你的 plt.imsave 的 [i,:]) 在循环内 for i in range (len (train_images))。您必须将其替换为[i,:,:, 0])。解决办法是这样的

      from matplotlib import pyplot as plt
      import numpy as np
      import tensorflow as tf
      
      (train_images, train_labels), (_, _) = tf.keras.datasets.mnist.load_data()
      
      train_images = train_images.reshape(train_images.shape[0], 28, 28, 1).astype('float32')
      train_images = (train_images - 127.5) / 127.5
      
      print(str(type(train_images[0,0])))
      
      for i in range(len(train_images)):
          plt.imsave('train_images\\' + str(train_labels[i]) + '.jpg', train_images[i, :, :, 0])
      

      更新:抱歉,只是更新了我在下面阅读您的答案的页面。没看到,正专心解决你的代码

      【讨论】:

      • @David Carpenter 抱歉,刚刚更新了我在下面阅读您的答案的页面。没看到,正专心解决你的代码
      猜你喜欢
      • 2019-03-05
      • 1970-01-01
      • 1970-01-01
      • 2019-06-04
      • 1970-01-01
      • 2021-02-19
      • 2020-10-08
      • 2018-09-08
      • 1970-01-01
      相关资源
      最近更新 更多