nii文件转jpg,保存在同一文件夹下

问题描述:
有一批nii文件,需要转换成jpg格式,将转换后的jpg文件保存在同一文件夹下。

思路:
通过nib.load读取nii文件转化为数组形式,再通过imageio.imwrite导出jpg文件。

步骤:

import nibabel as nib
import numpy as np
import imageio
import os

#读取nii文件
def read_niifile(niifile):  # 读取niifile文件
    img = nib.load(niifile)  # 下载niifile文件(其实是提取文件)
    img_fdata = img.get_fdata()  # 获取niifile数据
    img90 = np.rot90(img_fdata) #旋转90度
    #return img_fdata
    return img90

#保存jpg文件并输出
def save_fig(file):  # 保存为图片
    fdata = read_niifile(file)  # 调用上面的函数,获得数据
    (y, x, z) = fdata.shape  # 获得数据shape信息:(长,宽,维度-即切片数量)
    for k in range(z):
        silce = fdata[:, :, k]
        #silce = fdata[k, :, :]  # 三个位置表示三个不同角度的切片
        imageio.imwrite(os.path.join(output, '{}.jpg'.format(os.path.splitext(os.path.splitext(i)[0])[0]+'_'+str(k))), silce)
        # 将切片信息保存为jpg格式
        #i表示获取到的nii文件名(不含路径)
        #os.path.splitext(i)[0]表示去除文件名后缀
        #用两次splitext是因为图像原格式为.nii.gz,需要去两次后缀,如果是.nii形式的文件只用去除一次后缀即可
        #str(k)代表每层切片单独命名,避免重名,以_0,_1,...的形式命名

#读取文件
def findAllFile(base):
    for root, ds, fs in os.walk(base):
        for f in fs:
            yield f

#设置文件路径
base =r'C:\Users\nii' # nii文件的路径
output = r'C:\Users\jpg' # 保存png的路径
for i in findAllFile(base):
    dir = os.path.join(base,i)
    savepicdir = (os.path.join(output,i))
    #os.mkdir(savepicdir) #新建文件夹,重命名为nii文件名称,无需子文件夹,注释掉
    save_fig(dir)

你可能感兴趣的:(nii,影像处理)