在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)
为什么呢? (我真的想知道不同模式数组中数字的含义)
答案 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.int
,np.int8
,np.uint8
,...),您会发现每个数据都返回不同的数组。
在不了解PIL.Image
的对象结构的情况下,我不知道为什么会这样。但我认为没有.getdata()
,结果就是垃圾,这是可以肯定的。
答案 1 :(得分:1)
格式jpeg不支持模式1.将其保存为其他格式,png或bmp,然后查看该数组。