网上看了一个下午都没找到能用的。。。抄来抄去都没说到点子上
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') # 保存图片
版权归原作者 FitzFitzFitz 所有, 如有侵权,请联系我们删除。