图片格式的转换代码:nii、png、h5

  • nii可视化为png
import numpy as np
import os  # 遍历文件夹
import nibabel as nib  # nii格式一般都会用到这个包
import imageio  # 转换成图像


def nii_to_image(niifile):
    filenames = os.listdir(filepath)  # 读取nii文件夹
    slice_trans = []

    for f in filenames:
        # 开始读取nii文件
        img_path = os.path.join(filepath, f)
        img = nib.load(img_path)  # 读取nii
        img_fdata = img.get_fdata().astype(np.uint8)  # 将float64转为uint8否则报错
        fname = f.replace('.nii', '')  # 去掉nii的后缀名
        img_f_path = os.path.join(imgfile, fname)
        # 创建nii对应的图像的文件夹
        if not os.path.exists(img_f_path):
            os.mkdir(img_f_path)  # 新建文件夹

        # 开始转换为图像
        (x, y, z) = img.shape
        for i in range(z):  # z是图像的序列
            silce = img_fdata[i, :, :]  # 选择哪个方向的切片都可以
            imageio.imwrite(os.path.join(img_f_path, '{}.png'.format(i)), silce)
            # 保存图像


if __name__ == '__main__':
    filepath = 'E:/BraTS19_2013_0_1_seg.nii'  # nii文件夹
    imgfile = 'E:/imagepng'  # 转换后存放的位置
    nii_to_image(filepath)
  • h5可视化为png
import cv2
import h5py
from PIL import Image
import numpy as np
# from scipy.misc import imsave
from skimage import transform

# 这个也可以用
# hr_dataset = h5py.File('E:/wsj/hand_segmention/data/BraTS2019/data/BraTS19_2013_0_1.h5')['label']  #h5文件路径
# # label = h5py.File('data-train.h5')['train_set_1_tip']
# # lenght = len(hr_dataset)
# for i in range(len(hr_dataset)):
#     y = hr_dataset[i]
#     res = Image.fromarray(y.astype('uint8'), 'RGB')
#     # x = label[i]
#     cv2.imwrite('E:/wsj/hand_segmention/extra/h5/%s.png'%i, res)  #写成png格式

#  取出图像数据
hr_dataset = h5py.File('E:/wsj/SSL4MIS-master/SSL4MIS-master/data/BraTS2019/data/BraTS19_2013_0_1.h5')['image']
#  取出标签数据
label = h5py.File('E:/wsj/SSL4MIS-master/SSL4MIS-master/data/BraTS2019/data/BraTS19_2013_0_1.h5')['label']
for i in range(len(hr_dataset)):
   y = hr_dataset[i]
   x = label [i]
   cv2.imwrite(str(i)+"_img.png",y)
   cv2.imwrite(str(i)+"_label.png",x)



# hdf = h5py.File("E:/wsj/hand_segmention/data/BraTS2019/data/BraTS19_2013_0_1.h5",'r')
# array = hdf["image"][:]
# img = Image.fromarray(array.astype('uint8'), 'RGB')
# img.save("E:/wsj/hand_segmention/extra/h5", "png")
# img.show()

注:

h5文件也有一个可视化工具叫做vitables,感兴趣的可以去搜索一下如何安装,它的使用界面如下图所示,可以比较清晰的看到h5文件的维度等信息
在这里插入图片描述

  • png转为h5
    众所周知,深度学习需要大量的数据,而将将图片转为h5文件写入读取速度更快,实现方法如下:
import os
import numpy as np
import cv2
import h5py


img_list = []
label_list = []

img_path = './handdata1980/image'
img_file = os.listdir(img_path)
label_path = './handdata1980/unlabeled'
label_file = os.listdir(label_path)
# (从2开始时方便我自己命名,你可以从0开始)
for i in range(2, 200): # 批量处理,我这里是1980个图片标签,每10张存一个h5文件
    img_list = []
    label_list = []
    for file in img_file[(i-2)*10:(i-1)*10]:        # 10张存放一个h5文件
        c = os.path.basename(file)
        name = img_path + '/' + c
        img = cv2.imread(name, 0)  # 以灰度图读入
        img_list.append(img)  # 遍历二级文件每个图片并append信息进数组


    for file in label_file[(i - 2) * 10:(i - 1) * 10]:  # 10张存放一个h5文件
        c = os.path.basename(file)
        name = label_path + '/' + c
        label = cv2.imread(name, 0)
        label_list.append(label)  # 遍历二级文件每个图片并append信息进数组


    img_np = np.array(img_list)
    label_np = np.array(label_list)
    print(label_np.shape)

#'a' ,如果已经有这个名字的h5文件存在将不会打开,目的为了防止误删信息。
#‘w' ,如果有同名文件也能打开,但会覆盖上次的内容。
# for i in range(2, 200):
    filename = 'E:/wsj/hand_segmention/data/BraTS2019/data/unlabeled' + str(i+1) + '.h5'
    with h5py.File(filename, 'w') as f:
        f.create_dataset('image', data=img_np)              #创建两个数据集,分别为image
        f.create_dataset('label', data=label_np)          #和label的数组集

        f.close()
  • 2
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值