我想从5000BOLD中提取图片,这是一个Matlab文件,其中包含4916张彩色图片。当我使用以下命令将它们导入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绘制特定图片?
答案 0 :(得分:2)
查看较小的文件:
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'][0,0]
可能是二维数组。但是,如果是某种图像编码,则可能必须使用cv2
打开它。但是,如果不下载大文件,我将无济于事。