mat数据格式转png

发布时间:2024年01月12日

目的

多个.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")

文章来源:https://blog.csdn.net/qq_44864833/article/details/135562463
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。