【发布时间】:2016-06-03 17:52:55
【问题描述】:
我正在尝试使用 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])
【问题讨论】:
-
我似乎无法重现您的问题。您正在加载的图片可用吗?
-
我也无法重现这个。请张贴图片。
-
你确定你的问题不是integer division in Python 2.X?
-
我没有使用特定的图像。我只是在检查一个随机图像像素。因此,在像素索引 (30,45) 处,灰度像素值为 37。我也尝试强制浮点除法,但在所示示例中,我将偶数除以 2,这应该给出一个整数
-
有什么理由不使用像scikit-image 这样支持所有基本内容的编写良好的库?它有很多功能,并且基于 numpy,这有助于您在机器学习算法方面的后续步骤。
标签: python python-imaging-library