基于h5py的使用及数据封装代码


Posted in Python onDecember 26, 2019

1. h5py简单介绍

h5py文件是存放两类对象的容器,数据集(dataset)和组(group),dataset类似数组类的数据集合,和numpy的数组差不多。group是像文件夹一样的容器,它好比python中的字典,有键(key)和值(value)。group中可以存放dataset或者其他的group。”键”就是组成员的名称,”值”就是组成员对象本身(组或者数据集),下面来看下如何创建组和数据集。

1.1 创建一个h5py文件

import h5py
#要是读取文件的话,就把w换成r
f=h5py.File("myh5py.hdf5","w")

在当前目录下会生成一个myh5py.hdf5文件。

2. 创建dataset数据集

import h5py
f=h5py.File("myh5py.hdf5","w")
#deset1是数据集的name,(20,)代表数据集的shape,i代表的是数据集的元素类型
d1=f.create_dataset("dset1", (20,), 'i')
for key in f.keys():
 print(key)
 print(f[key].name)
 print(f[key].shape)
 print(f[key].value)

输出:

dset1
/dset1
(20,)
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
import h5py
import numpy as np
f=h5py.File("myh5py.hdf5","w")
a=np.arange(20)
d1=f.create_dataset("dset1",data=a)
for key in f.keys():
 print(f[key].name)
 print(f[key].value)

输出:

/dset1
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19]
2. hpf5用于封装训练集和测试集
#============================================================
# This prepare the hdf5 datasets of the DRIVE database
#============================================================
 
import os
import h5py
import numpy as np
from PIL import Image
 
def write_hdf5(arr,outfile):
 with h5py.File(outfile,"w") as f:
 f.create_dataset("image", data=arr, dtype=arr.dtype)
 
#------------Path of the images --------------------------------------------------------------
#train
original_imgs_train = "./DRIVE/training/images/"
groundTruth_imgs_train = "./DRIVE/training/1st_manual/"
borderMasks_imgs_train = "./DRIVE/training/mask/"
#test
original_imgs_test = "./DRIVE/test/images/"
groundTruth_imgs_test = "./DRIVE/test/1st_manual/"
borderMasks_imgs_test = "./DRIVE/test/mask/"
#---------------------------------------------------------------------------------------------
 
Nimgs = 20
channels = 3
height = 584
width = 565
dataset_path = "./DRIVE_datasets_training_testing/"
 
def get_datasets(imgs_dir,groundTruth_dir,borderMasks_dir,train_test="null"):
 imgs = np.empty((Nimgs,height,width,channels))
 groundTruth = np.empty((Nimgs,height,width))
 border_masks = np.empty((Nimgs,height,width))
 for path, subdirs, files in os.walk(imgs_dir): #list all files, directories in the path
  for i in range(len(files)):
   #original
   print "original image: " +files[i]
   img = Image.open(imgs_dir+files[i])
   imgs[i] = np.asarray(img)
   #corresponding ground truth
   groundTruth_name = files[i][0:2] + "_manual1.gif"
   print "ground truth name: " + groundTruth_name
   g_truth = Image.open(groundTruth_dir + groundTruth_name)
   groundTruth[i] = np.asarray(g_truth)
   #corresponding border masks
   border_masks_name = ""
   if train_test=="train":
    border_masks_name = files[i][0:2] + "_training_mask.gif"
   elif train_test=="test":
    border_masks_name = files[i][0:2] + "_test_mask.gif"
   else:
    print "specify if train or test!!"
    exit()
   print "border masks name: " + border_masks_name
   b_mask = Image.open(borderMasks_dir + border_masks_name)
   border_masks[i] = np.asarray(b_mask)
 
 print "imgs max: " +str(np.max(imgs))
 print "imgs min: " +str(np.min(imgs))
 assert(np.max(groundTruth)==255 and np.max(border_masks)==255)
 assert(np.min(groundTruth)==0 and np.min(border_masks)==0)
 print "ground truth and border masks are correctly withih pixel value range 0-255 (black-white)"
 #reshaping for my standard tensors
 imgs = np.transpose(imgs,(0,3,1,2))
 assert(imgs.shape == (Nimgs,channels,height,width))
 groundTruth = np.reshape(groundTruth,(Nimgs,1,height,width))
 border_masks = np.reshape(border_masks,(Nimgs,1,height,width))
 assert(groundTruth.shape == (Nimgs,1,height,width))
 assert(border_masks.shape == (Nimgs,1,height,width))
 return imgs, groundTruth, border_masks
 
if not os.path.exists(dataset_path):
 os.makedirs(dataset_path)
#getting the training datasets
imgs_train, groundTruth_train, border_masks_train = get_datasets(original_imgs_train,groundTruth_imgs_train,borderMasks_imgs_train,"train")
print "saving train datasets"
write_hdf5(imgs_train, dataset_path + "DRIVE_dataset_imgs_train.hdf5")
write_hdf5(groundTruth_train, dataset_path + "DRIVE_dataset_groundTruth_train.hdf5")
write_hdf5(border_masks_train,dataset_path + "DRIVE_dataset_borderMasks_train.hdf5")
 
#getting the testing datasets
imgs_test, groundTruth_test, border_masks_test = get_datasets(original_imgs_test,groundTruth_imgs_test,borderMasks_imgs_test,"test")
print "saving test datasets"
write_hdf5(imgs_test,dataset_path + "DRIVE_dataset_imgs_test.hdf5")
write_hdf5(groundTruth_test, dataset_path + "DRIVE_dataset_groundTruth_test.hdf5")
write_hdf5(border_masks_test,dataset_path + "DRIVE_dataset_borderMasks_test.hdf5")

遍历文件夹下的所有文件 os.walk( dir )

for parent, dir_names, file_names in os.walk(parent_dir): 
 for i in file_names: 
  print file_name

parent: 父路径

dir_names: 子文件夹

file_names: 文件名

以上这篇基于h5py的使用及数据封装代码就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
pycharm 使用心得(五)断点调试
Jun 06 Python
解决windows下Sublime Text 2 运行 PyQt 不显示的方法分享
Jun 18 Python
你所不知道的Python奇技淫巧13招【实用】
Dec 14 Python
Python实现查找匹配项作处理后再替换回去的方法
Jun 10 Python
windows下python和pip安装教程
May 25 Python
Python实现迭代时使用索引的方法示例
Jun 05 Python
Python2与Python3的区别实例总结
Apr 17 Python
Python3 列表,数组,矩阵的相互转换的方法示例
Aug 05 Python
分享一个pycharm专业版安装的永久使用方法
Sep 24 Python
pytorch 归一化与反归一化实例
Dec 31 Python
Python安装tar.gz格式文件方法详解
Jan 19 Python
pandas:get_dummies()与pd.factorize()的用法及区别说明
May 21 Python
python深copy和浅copy区别对比解析
Dec 26 #Python
详解python opencv、scikit-image和PIL图像处理库比较
Dec 26 #Python
torch 中各种图像格式转换的实现方法
Dec 26 #Python
python两个_多个字典合并相加的实例代码
Dec 26 #Python
Python时间差中seconds和total_seconds的区别详解
Dec 26 #Python
python requests模拟登陆github的实现方法
Dec 26 #Python
python 实现按对象传值
Dec 26 #Python
You might like
PHP4实际应用经验篇(8)
2006/10/09 PHP
php 文件状态缓存带来的问题
2008/12/14 PHP
php递归函数中使用return的注意事项
2014/01/17 PHP
php利用事务处理转账问题
2015/04/22 PHP
php 利用array_slice函数获取随机数组或前几条数据
2015/09/30 PHP
php如何控制用户对图片的访问 PHP禁止图片盗链
2016/03/25 PHP
php实现登录tplink WR882N获取IP和重启的方法
2016/07/20 PHP
php正则修正符用法实例详解
2016/12/29 PHP
Mootools 1.2教程 事件处理
2009/09/15 Javascript
怎么清空javascript数组
2013/05/11 Javascript
js打开新窗口方法整理
2014/02/17 Javascript
动态加载iframe时get请求传递中文参数乱码解决方法
2014/05/07 Javascript
jQuery拖拽排序插件制作拖拽排序效果(附源码下载)
2016/02/23 Javascript
修改js confirm alert 提示框文字的简单实例
2016/06/10 Javascript
Vue.js项目模板搭建图文教程
2017/09/20 Javascript
vue使用axios上传文件(FormData)的方法
2019/04/14 Javascript
js实现上下左右键盘控制div移动
2020/01/16 Javascript
vue下axios拦截器token刷新机制的实例代码
2020/01/17 Javascript
微信小程序选择图片控件
2021/01/19 Javascript
[02:54]DOTA2英雄基础教程 暗影牧师戴泽
2013/12/05 DOTA
Python functools模块学习总结
2015/05/09 Python
一行代码让 Python 的运行速度提高100倍
2018/10/08 Python
pycharm配置pyqt5-tools开发环境的方法步骤
2019/02/11 Python
Python之时间和日期使用小结
2019/02/14 Python
Python API len函数操作过程解析
2020/03/05 Python
如何使用scrapy中的ItemLoader提取数据
2020/09/30 Python
CSS3实现的炫酷菜单代码分享
2015/03/12 HTML / CSS
浅谈three.js中的needsUpdate的应用
2012/11/12 HTML / CSS
Ramy Brook官网:美国现代女装品牌
2019/06/18 全球购物
创业计划书中要认真思考的问题
2013/12/28 职场文书
中学生家长评语大全
2014/04/16 职场文书
计划生育工作汇报
2014/10/28 职场文书
2015年医院护理部工作总结
2015/04/23 职场文书
ConstraintValidator类如何实现自定义注解校验前端传参
2021/06/18 Java/Android
HTML中的表格元素介绍
2022/02/28 HTML / CSS
NASA 机智号火星直升机拍到了毅力号设备碎片
2022/04/29 数码科技