在训练我们搭建好的深度学习网络之前,数据的预处理至关重要。数据处理的第一步即读取图片,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库
print(type(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

最低0.47元/天 解锁文章
1488

被折叠的 条评论
为什么被折叠?



