我正在尝试使用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])
答案 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/2
是72
,而不是72.5
)。
如果你除以255,一切都会出现0(255本身除外,它将出现1。)
如果你想要浮点输出,除以浮点数(pix[i,j] / 255.0
),否则
from __future__ import division
默认情况下,分割两个整数的结果会给出一个浮点数。