关于更改图片shape的问题

使用python array 如何将shape为(14,1024,1024)的图片改为(1024,1024,14)

如何将shape为(14,1024,1024)的图片改为(1024,1024,14)
更改图片维度并且不失真一般用以下两种方法(不使用裁剪):
1 .permute(1,2,0)//将第一个维度换到第三个维度,这个应该就是你要的,我一般就是这么做
2 .views(H,W,C)//一般多用于合并某两个维度,比如.views(C,-1)就是将高和宽合并了,就是permute(C,H*W)
还有一个reshape,不过我记得reshape还是哪个是裁剪操作,建议就用第一个,妥妥的

可通过numpy来修改
假设data 为ndarray数组。shape为(3,1024,1024).则
new_data = np.transpose(data,(1,2,0))


>>> arr = [1,2,3,4,3,4]

>>> arr.reverse()

>>> print (arr)

[4, 3, 4, 3, 2, 1]


你说的应该是深度学习里面Tensor维度的问题,可以用numpy来转换维度,只要保证各维度相乘结果不变即可。

new_shape = np.reshape(data,(1024,1024,14))

如果有帮助,希望能采纳!

猜你可能遇到这样一个问题
torch.Tensor 高维矩阵的表示: N x C x H x W
numpy.ndarray 高维矩阵的表示:N x H x W x C
这时候如果你本身是tensor的话,需要使用numpy.transpose( ) 方法 。
比如说本身是(14,1024,1024)的图片,我们就可以用以下代码

img = np.transpose(img.numpy(),(1,2,0))

意义就是重新排列维度,把本身的第0个维度,也就是14,放在了最后一个维度,同理1024放在第0个维度,同理1024也放在第二个维度
最后得到(1024,1024,14)
在我的博客中也有写过,你可以详细看看https://redamancy.blog.csdn.net/article/details/119285113

#如果是numpy的数组的话
img=img.transpose((2,0,1)) #一定是2,0,1的顺序,这样才是CHW转成HWC
img = np.ascontiguousarray(img) #维度变换之后需要加上这个,使得内存不连续存储的数组转换为内存连续存储的数组



#如果是torch.tensor
img=img.permute(2,0,1)
#print(img.is_contiguous()) #打印内存是否连续,这里为False
img=img.contiguous() #一样需要加上这个之后内存才能连续,不然torch有些操作会报错
#print(img.is_contiguous()) #打印内存是否连续,这里为True
# 上面可以用一句话img=img.permute(2,0,1).contiguous() 

深度学习TensorFlow里面有一个TensorFlow。reshape函数,可以实现转换,说白了就是这个维度显示问题,或者你自己拿到shape这个列表把它反转一下也行


import numpy as np
Imagefile = misc.imread('图像.png')
temp = Imagefile.flatten()
outimage=temp.reshape(1024,1024,14)