目的
将
多个.mat数据格式
转化成多个文件夹下的png图片格式
即 一个PAT.mat文件,生成一个PAT文件夹下的图片
方法
1 单文件处理
import scipy.io as scio
from PIL import Image
import numpy as np
def MatrixToImage(data):
data = data*255
new_im = Image.fromarray(data.astype(np.uint8))
return new_im
path = 'PAT001.mat'
mat_data = scio.loadmat(path)
# 读取的mat以dict格式保存,因此需要查看一下数据的key值
print(type(mat_data), mat_data)
data = mat_data["Mask"] # 这里的是Mask,不同的mat值需要输出一下看一下
for j in range(data.shape[2]):
new_im = MatrixToImage(data[:,:,j])
new_im.save(f"pngdata/PAT_{j}.png")
注意点:
结果:
2 多文件处理
# 生成的数据放在各自的文件夹中
import scipy.io as scio
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
import os
# 根据自己任务指定文件夹的前缀和范围
folder_prefix = "PAT"
start_number = 1
end_number = 35
# 循环创建文件夹
for i in range(start_number, end_number + 1):
# 使用zfill方法来保证文件夹名称的固定长度
folder_name = f"{folder_prefix}{str(i).zfill(3)}"
# 使用os.makedirs来创建文件夹,exist_ok=True表示如果文件夹已存在则不会引发错误
os.makedirs(folder_name, exist_ok=True)
# 生成图片名称,因为mat数据格式都有顺序
# 从1-100和从001到100的命名方式对图片的影响不同
def format_numbers(start, end, width=3):
return [f"{num:0{width}}" for num in range(start, end + 1)]
# 生成mat的id
id = format_numbers(1,35,3)
# 生成png的名字id
save_id = format_numbers(1,1000,4)
# 二值数据转到0-255范围(可见)
def MatrixToImage(data):
data = data*255
new_im = Image.fromarray(data.astype(np.uint8))
return new_im
for i in id:
name = f"PAT{i}.mat"
path = name
mat_data = scio.loadmat(path)
data = mat_data["Mask"] # 这里是根据自己mat文件中提取数值
for j in range(data.shape[2]):
new_im = MatrixToImage(data[:,:,j])
save_name = save_id[j]
new_im.save(f"PAT{i}/PAT{i}D{save_name}.png")