1

numpy,该array方法可以将图像转换为一个大数组,问题是,这个数组中的数字是什么意思?(RGB值?灰度值?)

更重要的是,当我将图像转换为模式“1”时,尝试了

im = Image.open("test.jpg")
# Some processing ...
im = im.convert("1")
im_arr = array(im,dtype=uint8)

我发现 im_arr 数组不仅显示 0 和 255:

array([[170, 170, 170, ..., 255, 255, 255],
       [255, 248, 255, ..., 175, 255, 222],
       [255, 255, 247, ..., 175, 170, 171],
       ..., 
       [ 32, 105, 110, ...,  32, 124,  32],
       [ 32,  32,  32, ..., 101, 115,  39],
       [ 41,  10,  32, ..., 109, 111, 115]], dtype=uint8)

为什么?(我真的很想知道不同模式数组中数字的含义)

4

2 回答 2

2

通过运行im.convert("1"),您将加载的图像转换为仅具有 0 或 255 像素值的双层图像。要正确执行此操作,

im_arr = np.array(im.getdata(), dtype = np.uint8).reshape(im.size[0], im.size[1])

这样,您将收到所需的双层图像,您可以使用 保存或查看matplotlib.pyplot.imshow

您收到的奇数来自转换过程到一个 numpy 数组。如果您选择不同的数据类型(np.int, np.int8, np.uint8, ...),您会发现它们中的每一个都返回不同的数组。

在不了解 的对象结构的情况下PIL.Image,我无法说出这是为什么。但我认为可以肯定地说,没有.getdata()结果就是垃圾。

于 2013-03-21T17:31:32.370 回答
1

格式 jpeg 不支持模式 1。将其保存为不同的格式,png 或 bmp,然后查看该格式的数组。

PIL Jpeg 的文档

于 2013-03-21T16:32:44.577 回答