将列表转换为numpy数组问题

时间:2014-12-14 16:38:36

标签: python-2.7 numpy

使用python xy的spyder代码编辑器。

使用np.asarray(list)将像素颜色值列表保存到numpy数组时,它为我提供了一个具有奇怪维度的数组。

正在读取的原始图像的尺寸为(864,1089)(宽度,高度),并且是JPEG图像。当将此列表转换为numpy数组时,它返回一个维度为(940896,3)的数组,当我期望一个维度为一维的数组(940896,)时。我不明白3来自哪里......

img = Image.open('Images\satellite6.jpg')
pix = img.load()
width = img.size[0]
height = img.size[1]
pixels = []

for j in range(height):
    for i in range(width):
        pixels.append(pix[i,j])

pixels = np.array(pixels)
print np.shape(pixels)

(940896,3)

我也是发布问题的新手,所以如果有什么不清楚的地方,请告诉我:)

1 个答案:

答案 0 :(得分:1)

尝试查看pix[0,0]包含的内容,例如:

>>> img = Image.open('./edgewalker-cat.png')
>>> pix = img.load()
>>> pix
<PixelAccess object at 0x7f1afac932f0>
>>> pix[0,0]
(0, 0, 0)

它的元组大小为3,因此pixels列表,您逐个构建项目,将被转换为(width * height,3)的维度。

UPD:在灰度图像上,您将获得一个普通的int值:

>>> img = Image.open('./urban-dove-gray.jpg')
>>> pix = img.load()
>>> pix[0,0]
31