numpy数组中数字的含义是什么?

时间:2013-03-21 15:36:46

标签: python image-processing numpy scipy

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)

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

2 个答案:

答案 0 :(得分: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.intnp.int8np.uint8,...),您会发现每个数据都返回不同的数组。

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

答案 1 :(得分:1)

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

Documentation for PIL Jpeg