数据预处理(一)图片的读取和保存

在训练我们搭建好的深度学习网络之前,数据的预处理至关重要。数据处理的第一步即读取图片,python中的各种库支持多种不同的读取和保存方法,本文记录遇到的不同读取和保存方法及相应的踩坑记录并搜集相关信息,并保持更新,有不对或不周之处请各位读者批评指正。
具体的底层实现请自行参阅源码或博客注释。
处理图片时,比较关注读入图片的类型、像素值类型及大小、通道数目与顺序。

matplotlib

pyplot

在matplotlib的源码中,pyplot的imread与imsave都是调取了matplotlib.image中的imread与imsave,所以也可以直接import image模块。

imread

如果是png格式返回的是一个[0,1]之间的float类型数组,jpg格式返回的是[0,255]。

import matplotlib.pyplot as plt

image_path = "/public/cifar/0.png" 
img = plt.imread(image_path) # matplotlib只能本机读取png格式,如果要读取其他格式,要确保安装了pillow库
printtype(img)# <class 'numpy.ndarray'> 读进来为numpy数组
print(img.shape) # (32,32,4)形状为HWC的RGB格式,因为png多了一个a通道

imsave

numpy数组float类型值要在[-1,1]之间,uint8值要在[0,255]之间才能正确保存,且只支持(M,N)(M,N,3)(M,N,4)形式。
注意:即使是单通道灰度图像,使用imsave也会保存为3通道或者4通道。

imsave("filename",img)# 如filename =/experiment/map/1.jpg 

skimage

安装scikit-image:conda install scikit-image

skimage.io

imread

返回的也是一个ndarray对象,uint8类型,值范围0~255,RGB格式,HWC。

from skimage.io import imread,imsave

image_path = "/public/cifar/0.png" 
img = imread(image_path) 

imsave

float值要在[-1,1]间,uint8值要在[0,255],保存的是ndarray。
可保存单/3/4通道。

imsave
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值