图片数据集:📎dataset.zip
关于图像数据的导入一共是包含有两种图像类型PIL Image or ndarray
目标:按照PIL Image 或者 ndarray的格式读取图像,然后转换成为tensor的格式
PIL图像读取
PIL库是python内部自带的,PIL库中的Image.open函数可以按照路径读取图像信息
from PIL import Image
# 按照路径获取图像信息
PIL_img=Image.open('dataset/train/ants/0013035.jpg')
# 显示图像
PIL.show()
PIL图像转化成为tensor数据
PIL转化成为tensor数据使用的是torchvision库中的transforms.ToTensor函数,传入PIL格式的图像,输出的就是tensor数据。
from torchvision import transforms
tensor_trans=transforms.ToTensor()
tensor_img=tensor_trans(PIL_img)
图像tensor数据格式分析
一张图片的数据格式一般是三维格式
第一维度代表的是通道的数量,之前的手写数字识别的时候还不理解第一个维度1,代表什么含义,如果图像是彩色的,便是3通道,灰度图便是单通道的数据格式。
第二个维度和第三个维度分别就是行数与列数。
PIL图像数据和tensor数据形状数据查看对比
PIL数据中存在size属性,
,其中第一个代表的不是行数,而是(列,行)的格式,也就是列数是768,行数是512.
而在tensor中的shape属性
可以看到先是行数512,后是列数768。
ndarray方式读取图像数据
读取ndarray类型的数据需要使用cv2的方式进行读取,同样是传入路径数据。
import cv2
cv_img=cv2.imread('dataset/train/ants/0013035.jpg')
ndarray数据格式分析
ndarray数据格式是(行数、列数、通道数),类似于真实的图像信息存储方式,单元相当于是3元组,然后是长宽对应的元组长宽。
三种格式对比
相互之间对比,发现tensor、ndarray和PIL格式各不相同。PIL格式只能根据其中的size属性查看(列、行),具体数据不易查看,tensor是先通道,ndarray是将同一位置三个通道构成一个元组。
参考链接: