PIL打开图像的numpy数组中的元素数量错误

Posted

技术标签:

【中文标题】PIL打开图像的numpy数组中的元素数量错误【英文标题】:Wrong number of elements in a numpy array of a PIL-opened image 【发布时间】:2016-04-04 15:01:21 【问题描述】:

下面是一段简单的代码,用于使用 PIL 访问图像,转换为 numpy 数组,然后打印数组中元素的数量。

有问题的图像在这里 - - 正好包含 100 个像素 (10x10)。但是,numpy 数组包含 300 个元素(我希望有 100 个元素)。我做错了什么?

import numpy as np
import PIL

impath = 'C:/Users/Ricky/Desktop/testim.tif'
im = PIL.Image.open(impath)
arr = np.array(im)
print arr.size #300

【问题讨论】:

检查 shape (arr.shape)。推测是彩色图像,形状为(10, 10, 3)。最后一个维度包含红色、绿色和蓝色通道。 【参考方案1】:

每个图像可以由 3 个波段(红-绿-蓝或 RGB 合成)组成。 由于您的图像是黑白图像,因此这三个波段是相同的。您可以使用彩色图像查看差异。

试试这个看看我的意思:

import matplotlib.pyplot as pyplot
# this line above import a matplotlib library for plotting image

import numpy as np
import PIL
impath = 'C:/Users/Ricky/Desktop/testim.tif'
im = PIL.Image.open(impath)
arr = np.array(im)

print arr.shape # (10, 10, 3)
print arr[:, : ,0].size # 100

# next lines actually show the image
pyplot.imshow(arr[:, : ,0], cmap='gray')
pyplot.show()

【讨论】:

以上是关于PIL打开图像的numpy数组中的元素数量错误的主要内容,如果未能解决你的问题,请参考以下文章

PIL 图像到数组(numpy 数组到数组) - Python

将 NumPy 数组转换为 PIL 图像

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

创建数组X,并在python中为数组Y中的每个元素提供一定数量的副本

PIL中的Image和numpy中的数组array相互转换

numpy 插入一个元素,保持数组维度的数量