h5文件格式数据集制作

一、h5文件解释:

H5文件是层次数据格式第5代的版本(Hierarchical Data Format,HDF5),它是用于存储科学数据的一种文件格式和库文件。由美国超级计算中心与应用中心研发的文件格式,用以存储和组织大规模数据。

二、h5文件的作用:

H5将文件结构简化成两个主要的对象类型:

数据集dataset,就是同一类型数据的多维数组

group,是一种容器结构,可以包含数据集和其他组。

图示一:
h5文件格式数据集制作_第1张图片
图示二:

h5文件格式数据集制作_第2张图片

三、h5文件的使用:

1.写入数据

import h5py

"""
    create_dataset : 新建 dataset
    create_group : 新建 group
"""

x = np.arange(100)

with h5py.File('test.h5','w') as f:
    f.create_dataset('test_numpy',data=x)
    subgroup = f.create_group('subgroup')
    subgroup.create_dataset('test_numpy',data=x)
    subsub = subgroup.create_group('subsub')
    subsub.create_dataset('test_numpy',data=x)

2.读取数据

"""
    keys() : 获取本文件夹下所有的文件及文件夹的名字
    f['key_name'] : 获取对应的对象    
"""
def read_data(filename):
    with h5py.File(filename,'r') as f:

        def print_name(name):
            print(name)
        f.visit(print_name)
        print('---------------------------------------')
        subgroup = f['subgroup']  
        print(subgroup.keys())
        print('---------------------------------------')
        dset = f['test_numpy']
        print(dset)
        print(dset.name)
        print(dset.shape)
        print(dset.dtype)
        print(dset[:])
        print('---------------------------------------')

read_data('test.h5')

3.图片转h5

 from PIL import Image
 import os
 ​
##改变图片大小,修改图片名字 ​
 def get_smaller(path_in, name, path=None, width=64, length=64):
     ''' 检查文件夹是否建立,并建立文件夹 '''
     if path == None:
         tar = os.path.exists(os.getcwd() + "\\" + name)
         if not tar:
             os.mkdir(os.getcwd() + "\\" + name)
         im_path = os.getcwd() + "\\" + name + "\\"
     else:
         tar = os.path.exists(path + "\\" + name)
         if not tar:
             os.mkdir(path + "\\" + name)
         im_path = path + "\\" + name + "\\"
 ​
     i = 1
     list_image = os.listdir(path_in)
     for item in list_image:
         '''检查是否有图片'''
         tar = os.path.exists(im_path+str(i)+'.jpg')
         if not tar:
             image = Image.open(path_in+'\\'+item)
             smaller = image.resize((width, length), Image.ANTIALIAS)
             '''注意这里如果不加转换,很可能会有报错'''
             if not smaller.mode == "RGB":
                 smaller = smaller.convert('RGB')
             smaller.save(im_path+str(i)+'.jpg')
         i += 1
 get_smaller("E:\\桌面\\te\\001", "6")

4.h5转图片

 import cv2
 import h5py
 import numpy as np
 from scipy.misc import imsave
 from skimage import transform
 ​
 ​
 hr_dataset = h5py.File('test_data.h5')['images2']  //h5文件路径
 # label = h5py.File('data-train.h5')['train_set_1_tip']
 lenght=len(hr_dataset)
 for i in range(len(hr_dataset)):
    y = hr_dataset[i]
    # x = label[i]
    cv2.imwrite('image_test/%s.png'%i, y)  //写成png格式
    # cv2.imwrite(str(i)+"0.png", x)

参考文章:
1.h5文件格式详解及h5文件与图片文件之间的相互转换(python实现)
2.h5py 必知–String存储

你可能感兴趣的:(深度学习,python,numpy)