.mat格式数据转换(OCFW数据集)

.mat格式数据转换(OCFW数据集)

前言 (废话)
由于学校要求,前段时间不得不去找了份实习,测试岗,工作内容是对公司的一些AI组件进行测试,看看与其他公司的对比与差距。入职的第一个任务就是对比一下我们公司和百度智能云的人脸检测产品,自己在网上找数据集,找了好几个,但是都不太行,最后找到了OCFW数据集比较符合我的要求。然而,这个数据集竟然是.mat格式,在网上找了半天不知道该怎么用python进行数据转换,搞出来以后就打算写篇博客稍微记录一下。

OCFW数据集我也会上传上来,不需要积分。当然官网链接也放在这(这是官网链接),可以自己去下载,就是我之前下载的时候速度时快时慢的,可以多尝试几次。接下来讲下代码,代码其实很短,就二十几行就搞定了。
这些是引入的库,path是.mat文件所在,将文件打开保存在test里。

import h5py
import numpy as np
import matplotlib as plt
from PIL import Image
path="D:\COFW\COFW_color\COFW_test_color.mat"
test = h5py.File(path,"r")

打印出test中的内容,发现里面算是有四组数据,可以用print(test["IsT"])分别再打印每组数据保存的内容,像IsT就是HDF5 dataset "IsT": shape (1, 507),这里实际上要去了解一下数据集里面的具体内容,知道这些是什么东西,像IsT里面存放的就是图片的ref。OCFW采用的是HDF数据格式,简单来说就是它把图片数据放在一个库里,然后把图片的索引放在.mat文件里,如果我们需要这些图片,就根据索引去库里找(我是这么理解的,有可能有问题)。

print(test.keys())        # <KeysViewHDF5 ['#refs#', 'IsT', 'bboxesT', 'phisT']>

将图片的ref提取出来,方便后面的查找。这里range(507)是因为我用的是OCFW数据集中的测试集,一共507张图片。

images = np.transpose(test['IsT'])  # 所有测试集图像的ref
for num in range(507):
    img_name = images[num][0]           # 获取第 num 个图像的ref
    img = test[img_name]                # 读取第 num 个图像的数据
 
    print(img)                          # <HDF5 dataset "b": shape (239, 179), type "|u1">
    print(type(img))                    # <class 'h5py._hl.dataset.Dataset'>
 
    img = np.transpose(test[img_name])  # 转换为np数组,并对维度进行转置
     
    print(type(img))                    # <class 'numpy.ndarray'>
    print(img.shape)                    # (179, 239)
    
    image = Image.fromarray(np.uint8(img))
    image.save('output'+str(num)+'.jpg')

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值