[英]How to convert mat file including 4916 pictures (375x375x3) into a numpy array?
我想提取5000BOLD中的图片,这是一个包含4916彩色图片的Matlab文件。 当我使用以下命令将它们导入Python时:
import scipy.io as sio
mat = sio.loadmat('all_imgs.mat')
我得到一个字典type(mat): dict
。 如何将该文件更改为numpy数组,使我能够访问每张图片并对其进行绘制? 由于每个图片都是375x375x3
,因此我应该有一个375x375x3x4916
数组。
另外,使用mat.keys()
我有以下内容,我不知道每个元素的含义:
dict_keys(['__header__', '__version__', '__globals__', 'all_imgs'])
是否有直接方法直接使用此词典文件
mat
并使用imshow绘制特定图片?
看一个较小的文件:
In [33]: from scipy import io
In [34]: io.loadmat('../Downloads/all_img_names.mat')
没有分配的加载使我可以打印文件内容(我不建议在大图像文件中使用):
Out[34]:
{'__header__': b'MATLAB 5.0 MAT-file, Platform: GLNXA64, Created on: Thu Oct 19 14:20:48 2017',
'__version__': '1.0',
'__globals__': [],
'all_img_names': array([[array(['airplanecabin1.jpg'], dtype='<U18'),
array(['scenes'], dtype='<U6')],
[array(['airplanecabin3.jpg'], dtype='<U18'),
array(['scenes'], dtype='<U6')],
[array(['airplanecabin5.jpg'], dtype='<U18'),
array(['scenes'], dtype='<U6')],
...,
[array(['yogastudio2.jpg'], dtype='<U15'),
array(['scenes'], dtype='<U6')],
[array(['yogastudio3.jpg'], dtype='<U15'),
array(['scenes'], dtype='<U6')],
[array(['yogastudio4.jpg'], dtype='<U15'),
array(['scenes'], dtype='<U6')]], dtype=object)}
专门查看all_img_names
键。 这对应于源MATLAB工作空间中该名称的变量。 请注意,这是对象dtype。 像单元格一样,它可以包含其他数组:
In [36]: io.loadmat('../Downloads/all_img_names.mat')['all_img_names'].shape
Out[36]: (4916, 2)
再看一下该数组的第一个“行”,它也是object
dtype,具有2个字符串数组-文件名和某种类别标签:
In [37]: io.loadmat('../Downloads/all_img_names.mat')['all_img_names'][0]
Out[37]:
array([array(['airplanecabin1.jpg'], dtype='<U18'),
array(['scenes'], dtype='<U6')], dtype=object)
希望您能对如何探索mat['all_imgs']
的内容有所mat['all_imgs']
。
mat['all_imgs'][0,0]
可能是二维数组。 但是,如果是某种图像编码,则可能必须使用cv2
打开它。 但是,如果不下载大文件,我将无济于事。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.