【问题标题】:Converting list to numpy array issues将列表转换为 numpy 数组问题
【发布时间】:2014-12-15 01:02:28
【问题描述】:

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

当使用 np.asarray(list) 将像素颜色值列表保存到 numpy 数组时,它给了我一个尺寸奇怪的数组。

正在读取的原始图像的尺寸是 (864,1089) (width,height) 并且是 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)

我对发布问题也很陌生,所以如果有任何不清楚的地方,请告诉我 :)

【问题讨论】:

    标签: python-2.7 numpy


    【解决方案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
    

    【讨论】:

    • pix[0,0] 返回 (255,255,255)。我不明白的是我已经用其他图像做了这个,它总是返回一个一维的数组。是因为它的图像更大吗?
    • 不要认为大小很重要。你可能以前用灰度图像做过。尝试在灰度图像上查看 pix[0,0] 的结果 - 它会给你一个单一的 int。
    猜你喜欢
    • 2018-10-08
    • 2020-08-02
    • 2017-03-08
    • 2019-08-30
    • 2021-12-30
    • 2015-01-07
    • 2021-06-09
    • 2021-05-29
    相关资源
    最近更新 更多