首页 > 解决方案 > 如何在 python 中将 pyplot 图像保存为 .h5 文件并使用 HDFView 进行可视化?

问题描述

我正面临这个问题:我想将我制作的情节保存在 .h5 文件中。

我现在正在做的是::

import numpy as np
import matplotlib.pyplot as plt
data = np.random.randn(10,10)
fig = plt.scatter(data[0],data[1])
plt.savefig('image.jpg')

然后我创建 .h5 文件如下:

import cv2
import h5py
image = cv2.imread("image.jpg")
with h5py.File("h5_file.h5", 'a') as hf:   
        Xset = hf.create_dataset(
            name="img", 
            data=image,
            shape=image.shape,
            maxshape=image.shape)

而且,使用 HDFView 进行可视化,我可以看到如下结果: 在此处输入图像描述

我需要“作为图像”打开它,我可以看到 RGB 的每个“表”的图片。

我需要的是 HDFView 中 Tools>Convert Image to HDF5 的结果,如下所示:

在此处输入图像描述

有什么建议吗?或者要使用的任何其他 h5 可视化工具?

标签: pythonh5py

解决方案


问题不在于 HDF5 数据。我复制了您的代码并运行以创建 2 个文件。数据的比较(作为 NumPy 数组)表明它们是相同的。区别在于属性:

  • 当您读取图像cv2.imread()并保存数据时,不会创建任何属性。
  • 当您使用Tools>Convert Image to HDF5创建文件时,5 个属性会添加到数据集中。(请注意,此数据集在 HDFView 中具有不同的文件图标。)属性显示在 HDFView 的“对象属性信息”面板上和/或您可以使用以下代码获取它们:

代码:

for k,v in ds2.attrs.items():
    print ('attr:',k,'=',v)

输出:

attr: CLASS = b'IMAGE'
attr: IMAGE_MINMAXRANGE = [  0 255]
attr: IMAGE_SUBCLASS = b'IMAGE_TRUECOLOR'
attr: IMAGE_VERSION = b'1.2'
attr: INTERLACE_MODE = b'INTERLACE_PIXEL'

cv2.imread()您可以使用以下代码将这些属性添加到您的第一个文件(使用 创建):

Xset.attrs.create('CLASS','IMAGE',dtype='S6')
Xset.attrs.create('IMAGE_MINMAXRANGE',[0, 255],dtype=np.uint8)      
Xset.attrs.create('IMAGE_SUBCLASS','IMAGE_TRUECOLOR',dtype='S16')
Xset.attrs.create('IMAGE_VERSION','1.2',dtype='S4')
Xset.attrs.create('INTERLACE_MODE','INTERLACE_PIXEL',dtype='S16')

这是添加属性后我在 HDFView 中看到的图像。几乎相同 - 不再模糊,但数据点颜色不同(金色与蓝色)。不知道是什么原因造成的。也许与默认托盘有关?

在此处输入图像描述


推荐阅读