0


2022/7 用python批量将.mat文件转为.jpg/.png/.bmp格式图片

网上看了一个下午都没找到能用的。。。抄来抄去都没说到点子上

mat文件是Matlab的数据存储的标准格式。

涉及到文件转换肯定要看数据的结构,

事实上别人的代码很难成功就是因为大家的mat文件的数据结构各不相同

照着这个一步一步来你肯定可以学会

1、第一段代码,包括了引用和函数,不用修改

import cv2
import scipy.io as scio
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
import os

# 数据矩阵转图片的函数
def MatrixToImage(data):
    data = data * 255
    new_im = Image.fromarray(data.astype(np.uint8))
    return new_im

2、然后需要设置你的文件路径,三处

# 添加路径,文件夹下存放多个.mat文件
# 两个文件夹一个放.mat,一个放转换好的图片
datafolder = r'D:/新建文件夹/RINDNet-main/run/rindnet/depth/mat'
savefolder = r'D:/新建文件夹/RINDNet-main/run/rindnet/depth/out/'
path = os.listdir(datafolder)
print(os.path.splitext('100007.mat'))
# 这一步用于测试你是否正确设置了路径,也展示了splitxt函数的结果

运行一下查看一下print输出的是否正常

3、读取

    # 先取一个文件做实验,接下来在控制台一行一行运行
    each_mat='100007.mat'
    first_name, second_name = os.path.splitext(each_mat)
    # 拆分.mat文件的前后缀名字,

    each_mat = os.path.join(datafolder, each_mat)
    # print(each_mat)
    # 校验步骤,输出应该是路径

    array_struct = scio.loadmat(each_mat)
    # print(array_struct)
    # 校验步骤,输出的应该是一个结构体,然后查看你的控制台,看数据被存在了哪个字段里
    # 我的数据被放在了result里,所以下面填result

    array_data = array_struct['result']  # 取出需要的数字矩阵部分
    # print(array_data)
    # 校验步骤,看是否正常读出了数据

    new_im = MatrixToImage(array_data)  # 调用函数
    plt.imshow(array_data, cmap=plt.cm.gray, interpolation='nearest')
    new_im.show()
    new_im.save(savefolder+first_name + '.jpg')  # 保存图片

正常运行完这一段,已经能够完成单张图片的转换了,如果想要别的格式的图片,只需要改变最后一行

4 批量处理

完整代码给出,注意你之前设置的两个路径和一个字段

且最终运行的时候为了处理速度应该把所有输出(print和imshow)都注释掉。

import cv2
import scipy.io as scio
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
import os

# 数据矩阵转图片的函数
def MatrixToImage(data):
    data = data * 255
    new_im = Image.fromarray(data.astype(np.uint8))
    return new_im

# 添加路径,metal文件夹下存放mental类的特征的多个.mat文件
datafolder = r'D:/新建文件夹/RINDNet-main/run/rindnet/depth/mat'
savefolder = r'D:/新建文件夹/RINDNet-main/run/rindnet/depth/out/'
path = os.listdir(datafolder)
# print(os.path.splitext('100007.mat'))

for each_mat in path:
    # 先取一个文件做实验
    # each_mat='100007.mat'
    first_name, second_name = os.path.splitext(each_mat)
    # 拆分.mat文件的前后缀名字,
    each_mat = os.path.join(datafolder, each_mat)
    # print(each_mat)
    # 校验步骤,输出应该是文件名
    array_struct = scio.loadmat(each_mat)
    # print(array_struct)
    # 校验步骤
    array_data = array_struct['result']  # 取出需要的数字矩阵部分
    # print(array_data)
    # 校验步骤
    new_im = MatrixToImage(array_data)  # 调用函数
    plt.imshow(array_data, cmap=plt.cm.gray, interpolation='nearest')
    # new_im.show()
    # print(first_name)
    new_im.save(savefolder+first_name + '.jpg')  # 保存图片
标签: 大数据 python matlab

本文转载自: https://blog.csdn.net/qq_45985260/article/details/125636021
版权归原作者 FitzFitzFitz 所有, 如有侵权,请联系我们删除。

“2022/7 用python批量将.mat文件转为.jpg/.png/.bmp格式图片”的评论:

还没有评论