基于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分析作业提交情况
Nov 22 Python
python 动态加载的实现方法
Dec 22 Python
Python之reload流程实例代码解析
Jan 29 Python
python获取命令行输入参数列表的实例代码
Jun 23 Python
对numpy中向量式三目运算符详解
Oct 31 Python
python构建基础的爬虫教学
Dec 23 Python
利用python计算windows全盘文件md5值的脚本
Jul 27 Python
PyTorch学习:动态图和静态图的例子
Jan 06 Python
PyTorch 普通卷积和空洞卷积实例
Jan 07 Python
wxpython自定义下拉列表框过程图解
Feb 14 Python
python Socket网络编程实现C/S模式和P2P
Jun 22 Python
python之openpyxl模块的安装和基本用法(excel管理)
Feb 03 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生成SessionID和图片校验码的思路和实现代码
2009/03/10 PHP
PHP 图像尺寸调整代码
2010/05/26 PHP
详解 PHP加密解密字符串函数附源码下载
2015/12/18 PHP
PHP7 echo和print语句实例用法
2019/02/15 PHP
Aptana调试javascript图解教程
2009/11/30 Javascript
javascript 二进制运算技巧解析
2012/11/27 Javascript
js实现简单锁屏功能实例
2015/05/27 Javascript
新手快速学习JavaScript免费教程资源汇总
2015/06/25 Javascript
JavaScript数组方法总结分析
2016/05/06 Javascript
jQuery插件pagination实现无刷新分页
2016/05/21 Javascript
angularjs实现上拉加载和下拉刷新数据功能
2017/06/12 Javascript
vue loadmore组件上拉加载更多功能示例代码
2017/07/19 Javascript
在小程序中集成redux/immutable/thunk第三方库的方法
2018/08/12 Javascript
微信小程序使用wxParse解析html的实现示例
2018/08/30 Javascript
实例讲解React 组件生命周期
2020/07/08 Javascript
详细分析vue表单数据的绑定
2020/07/20 Javascript
小程序角标的添加及绑定购物车数量进行实时更新的实现代码
2020/12/07 Javascript
Python3.6笔记之将程序运行结果输出到文件的方法
2018/04/22 Python
Django + Uwsgi + Nginx 实现生产环境部署的方法
2018/06/20 Python
Python中extend和append的区别讲解
2019/01/24 Python
python使用pipeline批量读写redis的方法
2019/02/18 Python
Python-Seaborn热图绘制的实现方法
2019/07/15 Python
解决django的template中如果无法引用MEDIA_URL问题
2020/04/07 Python
python中rc1什么意思
2020/06/19 Python
基于HTML5的WebGL实现json和echarts图表展现在同一个界面
2017/10/26 HTML / CSS
Gtech官方网站:地毯清洁器、吸尘器及园艺设备
2018/05/23 全球购物
COS美国官网:知名服装品牌
2019/04/08 全球购物
Java程序员常见面试题
2015/07/16 面试题
社区优秀志愿者材料
2014/02/02 职场文书
2014年师德师风自我剖析材料
2014/09/27 职场文书
主婚人致辞精选
2015/07/28 职场文书
田径运动会广播稿
2015/08/19 职场文书
2016年万圣节活动总结
2016/04/05 职场文书
Nginx反爬虫策略,防止UA抓取网站
2021/03/31 Servers
Golang实现AES对称加密的过程详解
2021/05/20 Golang
mysql 如何获取两个集合的交集/差集/并集
2021/06/08 MySQL