python - 如何在 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 可视化工具?
解决方案
问题不在于 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 中看到的图像。几乎相同 - 不再模糊,但数据点颜色不同(金色与蓝色)。不知道是什么原因造成的。也许与默认托盘有关?
推荐阅读
- listview - 用列/行小部件包装小部件后屏幕消失
- excel - 如何在每个唯一值后插入 11 个空白行
- acumatica - 在 Acumatica 中用是/否下拉框替换复选框
- c# - 进度条在后台工作人员中无法正常工作
- database - 如何在 Visual Basic 代码中访问 MS Access 数据库文件?
- gradient-descent - 牛顿法会被归类为梯度下降法吗?
- android - 如何在离线模式android中更改fire base中的数据?
- laravel - 如何在没有 shell_exec 的实时服务器上运行 Laravel artisan?
- soapui - 制作一个可以返回 429 状态码的 soapui 模拟 REST 服务
- javascript - 读取组件文件 Angular 中的响应标头