之前网上的一些教程我运行后会出现“cannot write mode F as PNG”的错误,将浮点型数据(mode F)直接保存为PNG时遇到了问题,因为PNG不支持浮点型数据,需要将浮点型数据先转换为8位或16位整数。现修改如下:
import os import nibabel as nib import imageio import numpy as np def nii_to_image(filepath, imgfile): filenames = os.listdir(filepath) for f in filenames: img_path = os.path.join(filepath, f) img = nib.load(img_path) img_fdata = img.get_fdata() fname = f.replace('.nii', '') img_f_path = os.path.join(imgfile, fname) if not os.path.exists(img_f_path): os.mkdir(img_f_path) (x, y, z) = img.shape for i in range(z): slice = img_fdata[:, :, i] # 改为沿z轴切片 slice_normalized = (slice - np.min(slice)) / (np.max(slice) - np.min(slice)) image_8bit = (slice_normalized * 255).astype(np.uint8) imageio.imwrite(os.path.join(img_f_path, '{}.png'.format(i)), image_8bit) if __name__ == '__main__': filepath = r'读入路径' imgfile = r'存储路径' nii_to_image(filepath, imgfile) (filepath)