基于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 相关文章推荐
Python判断直线和矩形是否相交的方法
Jul 14 Python
深入浅析Python中join 和 split详解(推荐)
Jun 30 Python
关于Python面向对象编程的知识点总结
Feb 14 Python
Python聊天室程序(基础版)
Apr 01 Python
Python实现FTP弱口令扫描器的方法示例
Jan 31 Python
Python中低维数组填充高维数组的实现
Dec 02 Python
python3实现从kafka获取数据,并解析为json格式,写入到mysql中
Dec 23 Python
如何更改 pandas dataframe 中两列的位置
Dec 27 Python
python统计字符的个数代码实例
Feb 07 Python
详解python中GPU版本的opencv常用方法介绍
Jul 24 Python
安装pyecharts1.8.0版本后导入pyecharts模块绘图时报错: “所有图表类型将在 v1.9.0 版本开始强制使用 ChartItem 进行数据项配置 ”的解决方法
Aug 18 Python
Python selenium模拟网页点击爬虫交管12123违章数据
May 26 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
PHP XML操作类DOMDocument
2009/12/16 PHP
PHP中strtr字符串替换用法详解
2014/11/26 PHP
10个简化PHP开发的工具
2014/12/25 PHP
PHP面向对象程序设计之命名空间与自动加载类详解
2016/12/02 PHP
JavaScript实现网页对象拖放功能的方法
2015/04/15 Javascript
学习AngularJs:Directive指令用法(完整版)
2016/04/26 Javascript
浅谈JavaScript 浏览器对象
2016/06/03 Javascript
利用js获取下拉框中所选的值
2016/12/01 Javascript
详解为Angular.js内置$http服务添加拦截器的方法
2016/12/20 Javascript
20行js代码实现的贪吃蛇小游戏
2017/06/20 Javascript
js统计页面上每个标签的数量实例代码
2018/05/29 Javascript
微信小程序分享功能之按钮button 边框隐藏和点击隐藏
2018/06/14 Javascript
微信接入之获取用户头像的方法步骤
2019/09/23 Javascript
NUXT SSR初级入门笔记(小结)
2019/12/16 Javascript
vue2.x 对象劫持的原理实现
2020/04/19 Javascript
JavaScript前后端JSON使用方法教程
2020/11/23 Javascript
python matplotlib实现双Y轴的实例
2019/02/12 Python
Python进阶之全面解读高级特性之切片
2019/02/19 Python
Python可迭代对象操作示例
2019/05/07 Python
Python PIL读取的图像发生自动旋转的实现方法
2019/07/05 Python
Django Python 获取请求头信息Content-Range的方法
2019/08/06 Python
python redis 批量设置过期key过程解析
2019/11/26 Python
关于numpy.where()函数 返回值的解释
2019/12/06 Python
Python打包模块wheel的使用方法与将python包发布到PyPI的方法详解
2020/02/12 Python
Python可变对象与不可变对象原理解析
2020/02/25 Python
python如何求圆的面积
2020/07/01 Python
Python生成pdf目录书签的实例方法
2020/10/29 Python
在Ubuntu中安装并配置Pycharm教程的实现方法
2021/01/06 Python
工程师自我评价怎么写
2013/09/19 职场文书
数控专业个人求职信范例
2013/11/29 职场文书
小学毕业家长寄语
2014/01/19 职场文书
年度考核自我鉴定
2014/02/02 职场文书
采购助理岗位职责
2014/02/16 职场文书
幼儿园父亲节活动方案
2014/03/11 职场文书
一篇文章带你深入了解Mysql触发器
2021/08/02 MySQL
SpringBoot+VUE实现数据表格的实战
2021/08/02 Java/Android