.mat文件批量转成图片——python脚本编写

.mat文件批量转成图片——python脚本编写

mat文件简介

mat文件是Matlab的数据存储的标准格式。mat文件是标准的二进制文件,还可以ASCII码形式保存和加载,在MATLAB中打开显示类似于单行EXCEL表格。 —— [ 百度百科 ]

mat文件最基本的操作主要有两个:

第一、用load命令,具体为load+文件名.mat,就可以将mat中的数据放到工作空间里,然后操作

第二、用save命令,具体为save+文件名(自己取一个).mat,就可以将当前工作区间里的数据保存下来供调用了

由于深度学习中训练模型需要的输入是图片,而需要的特征保存在mat文件中,考虑到数据库包含大量的数据,所以需要编写程序来完成mat文件批量转成图片。
采用python语言来编写脚本。

单个mat文件的导入与转换

代码如下:

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

dataFile = r'/folder/reggae.00041.mat' # 单个的mat文件
data = scio.loadmat(dataFile)
print(type(data))
# print (data['data']) 
# 由于导入的mat文件是structure类型的,所以需要取出需要的数据矩阵
a=data['data']
# 取出需要的数据矩阵

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

new_im = MatrixToImage(a)
plt.imshow(a, cmap=plt.cm.gray, interpolation='nearest')
new_im.show()
new_im.save('reggae.00041.bmp') # 保存图片

批量处理

单个的mat文件转图片是很好实现的,但是处理的要点就在于对mat文件的批量处理,当一个文件夹下有几百个或者更多的mat文件,就必须进行遍历操作来完成批量转换。

.mat文件批量转成图片——python脚本编写_第1张图片
如图,metal文件夹下包含了很多个.mat文件,其中的名称是可以拆分的,可以利用中间的数字段进行遍历操作。

.mat文件批量转成图片——python脚本编写_第2张图片
在matlab中打开其中一个mat文件,发现一个mat文件中包含了三部分,所需要的是其中的data的数字矩阵部分。

考虑以上两点,具体的代码如下:

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文件
folder = r'/Users/Desktop/metal'
path = os.listdir(folder)
#print(os.listdir(r'/Users/hjy/Desktop/blues'))

for each_mat in path:
    if each_mat == '.DS_Store':
        pass
    else:
        first_name, second_name = os.path.splitext(each_mat)
        # 拆分.mat文件的前后缀名字,注意是**路径**
        each_mat = os.path.join(folder, each_mat)
        # print(each_mat)
        array_struct = scio.loadmat(each_mat)
        array_data = array_struct['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(first_name+'.bmp')# 保存图片

运行程序,可得到:
.mat文件批量转成图片——python脚本编写_第3张图片
可以看到,在在对应文件夹下已经完成.mat文件批量转换成图片。

你可能感兴趣的:(python脚本编写)