PIL:像素数学属性

时间:2016-06-03 17:52:56

标签: python python-imaging-library

我正在尝试使用PIL对单个像素进行一些数学运算。

从互联网上我可以将图像加载到像这样的二维数组中:

from PIL import Image
img_filename = "CNH.JPG" 
im = Image.open(img_filename)
im = im.convert('L')
pix = im.load()

我对单个像素值进行了一些更改,但是当我尝试进行除法时(即使它返回一个int),它只是舍入为0或255:

>>> i=30
>>> j=45
>>> pix[i,j]
37
>>> pix[i,j]+5
42
>>> pix[i,j]*2
84
>>> pix[i,j]/2
0
>>> pix[i,j]*2
0

似乎我遇到的问题与分歧有关。

我的目标是将像素值规范化为范围(0,1)中的浮点数而不是(0,255)。因此,我只想将每个像素值除以255。

我在Python语言中缺少什么?

此外,对于未来的工作,我计划在Python中实现一些特征提取和分类算法。 PIL是否适合此目的?

示例代码:

from PIL import Image

img_filename = "yourimage.JPG"
im = Image.open(img_filename)
im = im.convert('L')
pix = im.load() 

i=30
j=45

print(pix[i,j])
pix[i,j] = pix[i,j]+5
print(pix[i,j])
pix[i,j] = pix[i,j]*2
print(pix[i,j])
pix[i,j] = float(pix[i,j]/2)
print(pix[i,j])
pix[i,j] = pix[i,j]*2
print(pix[i,j])

1 个答案:

答案 0 :(得分:0)

这里工作正常:

In [15]: pix[i,j]
Out[15]: 145

In [16]: pix[i,j]+5
Out[16]: 150

In [17]: pix[i,j]/2
Out[17]: 72

In [18]: float(pix[i,j]/2)
Out[18]: 72.0

In [19]: pix[i,j] = float(pix[i,j]/2)
In [20]: pix[i,j]
Out[20]: 72

当然,这是整数除法(因此145/272,而不是72.5)。 如果你除以255,一切都会出现0(255本身除外,它将出现1。)

如果你想要浮点输出,除以浮点数(pix[i,j] / 255.0),否则

from __future__ import division

默认情况下,分割两个整数的结果会给出一个浮点数。