2013-03-21 84 views
1

numpy,该array方法可以一图像转换成一个大阵,问题是,什么的数字数组中的含义是什么?(RGB值?灰度值?)numpy数组中数字的含义是什么?

更重要的是,当我一个图像转换为模式 “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

你从哪里得到最初'im'? – mgilson 2013-03-21 15:37:54

回答

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()的结果是垃圾。

相关问题