python PIL image.getdata() 返回的数据比预期的更多。

14 浏览
0 Comments

python PIL image.getdata() 返回的数据比预期的更多。

这个问题已经有答案了:

如何将PIL图像转换为NumPy数组?

以下是:

image = Image.open(name, 'r')
data = np.array(image.getdata())
data.reshape(image.size)

返回:

Traceback (most recent call last):
  File "/home/usr/colorviewer/main.py", line 207, in 
    print(getPalette())
  File "/home/usr/colorviewer/main.py", line 152, in getPalette
    data.reshape(image.size)
ValueError: cannot reshape array of size 921600 into shape (640,480)

为什么它说数组大小为921600,而不是像大小所示的307200,并且图像数据如何重塑成其正常分辨率?

admin 更改状态以发布 2023年5月21日
0
0 Comments

每个像素使用三个值 R,G,B,所以它有 640*480*3 的大小,即 921600 字节。

因此,需要重新形状为 (640,480,3)。它需要 * 来解包 size

data.reshape(*image.size, 3)

如果图像可以是透明的,则可能有 640*480*4 字节。最好重塑为 (640,480,-1),它应该自动使用 34

data.reshape(*image.size, -1)


或者跳过 .getdata(),你将得到已经被重塑的数组

data = np.array(image)

0