我正在尝试将图像转换为numpy数组,当我这样做时,它会给我标题中提到的错误。 回溯错误来自以下行:
nx,ny = np.shape(matrix)
我的其余代码如下。我可以提出一些建议来解决这个问题吗?
#change the quoted part to change directory and
#file type
filelist = glob.glob('Desktop/*.png')
#set Matrix as the numpy array.
#change the second half were np
#is used to make the program
#use a different set of data
matrix = np.array([np.array(Image.open(fname)) for fname in filelist])
#numpy array
nx,ny = np.shape(matrix)
CXY = np.zeros([ny, nx])
for i in range(ny):
for j in range(nx):
CXY[i,j] = np.max(matrix[j,i,:])
#Binary data
np.save('/home/l/Desktop/maximums.npy', CXY)
#Human readable data
np.savetxt('/home/l/Desktop/maximums.txt', CXY)
答案 0 :(得分:0)
当您构建这样的数组时,请确保您了解所获得的数据。特别要验证形状和dtype。
matrix = np.array([np.array(Image.open(fname)) for fname in filelist])
nx,ny = np.shape(matrix)
这样解压缩只有matrix
为2d时才有效,也就是说,它的形状是2个元素元组,每个变量都有一个元素。
此索引matrix[j,i,:]
表示您希望matrix
为3d。这会产生解包错误expected 2, got 3
。
CXY = np.zeros([ny, nx])
for i in range(ny):
for j in range(nx):
CXY[i,j] = np.max(matrix[j,i,:])
但实际错误告诉我们matrix
是1d。我怀疑它也是object
dtype。这是一个数组阵列。
我猜测matrix
创作中发生了什么。 Image.open(fname)
- 这是做什么的?打开一个文件?读它也好吗?为什么np.array()
包装器。但我们假设它加载了2d或3d图像阵列。所有图像都是相同的尺寸吗?如果它们不同,则外部np.array
无法将它们组装成更高维的数组。相反,它决定制作一个1d对象数组 - 一个数组数组。
总之,请确保您了解matrix
的构造方式及其产生的结果。
nx, ny = ...
可以派上用场,但这是不可原谅的。如果尺寸错误,则会在没有太多信息的情况下引发错误。