Scipy.misc.imread压扁参数 - 转换为灰度

时间:2015-08-31 15:22:41

标签: python scipy python-imaging-library pillow

我试图理解这种方法如何以灰度变换图像(如果它使用简单的均值或加权均值) - 我必须引用这种方法。 从文档中我知道这个方法调用convert('F')方法。 从Pillow / PIL源代码中,我可以找到这种方法,但是,当mode参数设置为'F'时,我找不到它的作用。 谢谢。

2 个答案:

答案 0 :(得分:2)

convert对象的Image方法的文档字符串中(在您链接到的代码中看到),有​​以下内容:

  

将彩色图像转换为黑白时(模式" L"),   该库使用ITU-R 601-2亮度变换::

     

L = R * 299/1000 + G * 587/1000 + B * 114/1000

显然这也是处理mode='F'的方式。

以下是一个例子:

In [2]: from PIL import Image

为演示创建一个数组:

In [3]: x = np.random.randint(0, 9, size=(4, 4, 3)).astype(np.uint8)

使用mode='F'方法中的convert将数组转换为图片并返回数组:

In [4]: np.array(Image.fromarray(x).convert('F'))
Out[4]: 
array([[ 3.24499989,  6.30499983,  1.86899996,  4.54400015],
       [ 3.54399991,  5.04300022,  4.63000011,  0.29899999],
       [ 2.0539999 ,  3.29900002,  1.85800004,  1.76100004],
       [ 3.9289999 ,  4.76100016,  5.76100016,  2.47799993]], dtype=float32)

x的文档字符串中显示的因素乘以convert

In [5]: f = np.array([0.299, 0.587, 0.114])

In [6]: x.dot(f)
Out[6]: 
array([[ 3.245,  6.305,  1.869,  4.544],
       [ 3.544,  5.043,  4.63 ,  0.299],
       [ 2.054,  3.299,  1.858,  1.761],
       [ 3.929,  4.761,  5.761,  2.478]])

如果我们转换为np.float32,我们会看到与convert方法创建的完全相同的值:

In [7]: x.dot(f).astype(np.float32)
Out[7]: 
array([[ 3.24499989,  6.30499983,  1.86899996,  4.54400015],
       [ 3.54399991,  5.04300022,  4.63000011,  0.29899999],
       [ 2.0539999 ,  3.29900002,  1.85800004,  1.76100004],
       [ 3.9289999 ,  4.76100016,  5.76100016,  2.47799993]], dtype=float32)

答案 1 :(得分:0)

模式参数' F'代表'浮点'。

from PIL import Image

im = Image.new("F", (2,2))
pixels = im.load()
pixels[0,0] = 255.0
pixels[1,0] = 200.0
pixels[0,1] = 100.0
pixels[1,1] = 20.0
im.show()