繁体   English   中英

如何将包括4916张图片(375x375x3)的mat文件转换为numpy数组?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM