对图像维度进行调整(升降维和调整顺序)

图片路径:

img_path =./datasets/proposal-flow-pascal/PF-dataset-PASCAL/JPEGImages/2009_003820.jpg’

读取图片的2种不同方法:

from PIL import Image
image = Image.open(img_path)
from skimage import io
image = io.imread(img_path)

这2种方法读取的图像的shape是一样的,都是numpy数组类型:(228, 300, 3)

对numpy数组类型的图像进行处理:

对图像的维度进行顺序调整:

source_image = source_image.transpose((2,0,1))

图像的shape变为:(3, 228, 300)

对图像进行升维

source_image = np.expand_dims(source_image,0)

图像的shape变为:(1, 3, 228, 300)

对图片进行降维

source_image = source_image[0]

图像的shape变为:(3, 228, 300)

可以将图片从numpy数组转为Torch张量:

source_image = torch.Tensor(source_image)

图像的shape变为:torch.Size([3, 228, 300])

对Torch张量类型的图像进行处理:

对图像(Torch张量)进行升维

source_image = np.expand_dims(source_image,0)

图像的shape变为:(1, 3, 228, 300)

注意,使用np.expand_dims对Torch张量进行升维之后,类型会自动变成numpy数组

type(source_image)		# 类型为numpy.ndarray

source_image = torch.Tensor(source_image)		# 将图片从numpy数组转为Torch张量

图像的shape变为:torch.Size([1, 3, 228, 300])

对图像(Torch张量)进行降维:

source_image = source_image[0]

图像的shape变为:torch.Size([3, 228, 300])

对图像(Torch张量)的维度进行顺序调整:

source_image = source_image.permute(1, 2, 0)  

图像的shape变为:torch.Size([228, 300, 3])

注意:
numpy数组调整顺序用的是.transpose((x,x,x))
Torch张量调整顺序用的是.permute(x, x, x)

可以将图片从Torch张量转为numpy数组:

source_image = source_image.numpy()

将张量转为(w, h, d)形式的numpy数组后就可以将图像进行显示输出

plt.imshow(source_image)
plt.show()

版权声明:本文为weixin_44828787原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。