【问题标题】:PIL: pixels mathematical propertiesPIL:像素数学属性
【发布时间】: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


【解决方案1】:

这里很好用:

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

让两个整数相除的结果默认给出一个浮点数。

【讨论】:

    猜你喜欢
    • 2021-02-17
    • 1970-01-01
    • 2020-11-29
    • 2021-01-25
    • 2011-03-26
    • 2021-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多