xinggu_ 2023-06-07 22:44 采纳率: 100%
浏览 14
已结题

保存npz文件出现乱码问题,求解!

运行以下代码,发现存入npz文件内的图片是乱码,输出图在下方,已检查“数据集路径”,“图片尺寸”,“图片格式“均无问题。安装的库均为匹配版本

img


以下是保存数据集代码


from os import listdir
import numpy as np
from numpy import asarray
from tensorflow.keras.preprocessing.image import img_to_array
from tensorflow.keras.preprocessing.image import load_img
def load_images(path, size=(256, 256)):
    data_list = list()
    for filename in listdir(path):
        pixels = load_img(path + filename, target_size=size)
        pixels = img_to_array(pixels)
        data_list.append(pixels)
    return asarray(data_list)

# dataset path
path = '../hourse/horse2zebra/'
# load dataset A
dataA1 = load_images(path + 'trainA/')
dataA2 = load_images(path + 'testA/')
dataA = np.vstack((dataA1, dataA2))
print('Loaded dataA: ', dataA.shape)
# load dataset B
dataB1 = load_images(path + 'trainB/')
dataB2 = load_images(path + 'testB/')
dataB = np.vstack((dataB1, dataB2))
print('Loaded dataB: ', dataB.shape)
# save as compressed numpy array
filename = 'horse2zebra256.npz'
# np.savez_compressed(filename, dataA, dataB)
print('Saved dataset: ', filename)

# 查看horse2zebra_256.npz里的图片

from numpy import load
from matplotlib import pyplot
data = load(r'../hourse/horse2zebra256.npz')
dataA, dataB = data['arr_0'], data['arr_1']
print('Loaded: ', dataA.shape, dataB.shape)
n_samples = 3
for i in range(n_samples):
    pyplot.subplot(2, n_samples, 1 + i)
    pyplot.axis('off')
    pyplot.imshow(dataA[i])
for i in range(n_samples):
    pyplot.subplot(2, n_samples, 1 + n_samples + i)
    pyplot.axis('off')
    pyplot.imshow(dataB[i])
pyplot.show()


以下是创建npz文件代码

import numpy as np

# 创建需要存储的数据
dataA = np.random.rand(100, 256, 256, 3)
dataB = np.random.rand(100, 256, 256, 3)

# 存储数据到npz文件
np.savez('horse2zebra256.npz', arr_0=dataA, arr_1=dataB)


  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-06-08 08:03
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:
    • 以下回答来自chatgpt:

      对于保存图像数据,可以采用opencv库中的imread和imwrite函数,将图像读取为numpy array形式,再进行保存。可以先尝试使用以下代码进行保存:

      import numpy as np
      import cv2
      
      images = []
      for image_path in image_path_list: # image_path_list为图像的路径列表
          img = cv2.imread(image_path, cv2.IMREAD_UNCHANGED)
          images.append(img)
      
      np.savez('images.npz', *images)
      

      如果还是出现乱码,可以尝试使用pickle进行保存:

      import numpy as np
      import cv2
      import pickle
      
      images = []
      for image_path in image_path_list: # image_path_list为图像的路径列表
          img = cv2.imread(image_path, cv2.IMREAD_UNCHANGED)
          images.append(img)
      
      with open('images.pkl', 'wb') as f:
          pickle.dump(images, f)
      

      如果还是出现乱码,可能是其它原因导致,需要进一步排查。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 6月16日
  • 已采纳回答 6月8日
  • 创建了问题 6月7日

悬赏问题

  • ¥15 如何在3D高斯飞溅的渲染的场景中获得一个可控的旋转物体
  • ¥88 实在没有想法,需要个思路
  • ¥15 MATLAB报错输入参数太多
  • ¥15 python中合并修改日期相同的CSV文件并按照修改日期的名字命名文件
  • ¥15 有赏,i卡绘世画不出
  • ¥15 如何用stata画出文献中常见的安慰剂检验图
  • ¥15 c语言链表结构体数据插入
  • ¥40 使用MATLAB解答线性代数问题
  • ¥15 COCOS的问题COCOS的问题
  • ¥15 FPGA-SRIO初始化失败