目录

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


1、数据集介绍

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

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)

显示图像:

python调用数据集 数据集如何在python中引用_h5

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

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

显示图像:

python调用数据集 数据集如何在python中引用_python调用数据集_02


方法二:直接利用cv2

代码如下:

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

运行结果:(独立窗口直接运行)

python调用数据集 数据集如何在python中引用_python调用数据集_03

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,以上便是本文的全部内容了,如果对你有所帮助,记得点个赞哟~