您当前的位置: 首页 >  Python

wendy_ya

暂无认证

  • 2浏览

    0关注

    342博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Python实例之利用h5py库保存数据集

wendy_ya 发布时间:2021-11-29 21:31:05 ,浏览量:2

目录
    • 1、数据集介绍
    • 2、保存为HDF5文件
    • 3、从h5py中读取图像
    • 4、查看图像
    • 5、拓展——将压缩包内图像保存为HDF5文件

1、数据集介绍

本文选用的数据集是CelebA数据集)数据集,该数据集由202599幅图像组成,本文选取了前20000张数据,图像保存在名为img_align_celeba的文件夹中,有需要的可以自行下载:https://download.csdn.net/download/didi_ya/52035107。

h5py是python中一种数据压缩格式,它的优势:速度快、压缩效率高。尤其是在处理深度学习的大量图像时,常常用到。 h5py库的安装十分简单,直接在cmd命令行窗口输入:

pip install h5py

h5py库的相关函数和方法可以去官网查找:h5py官网。

2、保存为HDF5文件

由于这20000张图像没有标签,因此直接读取图像存入h5py文件中即可,代码如下:

import os
import numpy as np
import cv2
import h5py

def save_image_to_h5py(path):
    img_list=[]  #初始化
    for dir_image in os.listdir(path):
        #读取文件
        img=cv2.imread(os.path.join(path,dir_image))
        img_list.append(img)  #追加到img_list列表中

    img_np = np.array(img_list)  #转为numpy的ndarray类型

    f = h5py.File('hdf5_file.h5', 'w')  #写入文件
    f['image'] = img_np  #名称为image
    f.close()  #关闭文件

save_image_to_h5py('img_align_celeba')
3、从h5py中读取图像

读取图像代码如下:

import h5py
file=h5py.File('hdf5_file.h5','r')
image = file['image'][0, :, :, :]

可以检查一下image的形状:

image.shape

运行结果: (218, 178, 3)

【注意】:这里可以查看一下x[‘image’]的形状:

image = x['image']
image.shape

运行结果: (20000, 218, 178, 3)

这20000张图像的全部数据都存在这里了,想调用哪个图像第一个参数就选几即可。

4、查看图像

读取图像完成后,可以查看图像,查看图像有两种方法: 方法一:利用matplotlib工具包

代码示例:

import matplotlib.pyplot as plt
plt.imshow(image)

显示图像: 在这里插入图片描述

可以发现显示的图像偏蓝,这是因为matplotlib 的颜色通道是BGR,不是一般的RGB,因此需要加入如下代码:

res = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

显示图像: 在这里插入图片描述 方法二:直接利用cv2

代码如下:

import cv2
cv2.imshow('image',image)
cv2.waitKey(0)   #等待键盘输入,单位为毫秒,即等待指定的毫秒数看是否有键盘输入,若在等待时间内按下任意键则返回按键的ASCII码,程序继续运行。
#若没有按下任何键,超时后返回-1。参数为0表示无限等待。不调用waitKey的话,窗口会一闪而逝,看不到显示的图片。
cv2.destroyAllWindows()  #销毁所有窗口

运行结果:(独立窗口直接运行) 在这里插入图片描述

5、拓展——将压缩包内图像保存为HDF5文件

将压缩包内图像保存为HDF5文件利用的是python的zipfile包,完整代码如下:

import h5py
import zipfile
import imageio
import os

hdf5_file = 'celeba.h5'
total_images = 20000   #总共20000张图像

with h5py.File(hdf5_file,'w') as hf:
    count=0
    with zipfile.ZipFile('img_align_celeba.zip', 'r') as zf:
        for i in zf.namelist():
            ofile = zf.extract(i)
            img = imageio.imread(ofile)
            os.remove(ofile)
            #将图像添加到HDF5文件中并重新命名
            hf.create_dataset('img_align_celeba/'+str(count)+'.jpg', data=img, compression="gzip", compression_opts=9)
            count = count + 1
            if(count%1000 == 0):
                print("images done .. ", count)
            if(count==total_images):
                break

ok,以上便是本文的全部内容了,如果对你有所帮助,记得点个赞哟~

参考:

  1. https://blog.csdn.net/qq_41776781/article/details/93379739
  2. https://blog.csdn.net/a10201516595/article/details/105623141
关注
打赏
1659256378
查看更多评论
立即登录/注册

微信扫码登录

0.0442s