Python - 带 PIL 的灰度公式
Python - gray scale formula with PIL
我想用自己的代码制作灰度图。
from PIL import Image
path = "people.jpg"
img = Image.open(path)
img = img.convert("LA")
img.save("new_image.png")
所以我将 img.convert()
更改为我自己的公式。但是没用。
from PIL import Image
path = "people.jpg"
img = Image.open(path)
rgb = img.convert("RGB")
width,height = rgb.size
for x in range(width):
for y in range(height):
red,green,blue = rgb.getpixel((x,y))
value = red * 299/1000 + green * 587/1000 + blue * 114/1000
value = int(value)
rgb.putpixel((x,y),value)
rgb.save("new.png")
知道哪里出了问题吗?新图为红色背景
灰度图像的每个像素都有一个包含两个值的元组 -(亮度值,255)。创建新的灰度图像并为每个像素赋值即可。
greyim=Image.new("LA",(width,height))
for x in range(width):
for y in range(height):
red,green,blue = rgb.getpixel((x,y))
value = red * 299/1000 + green * 587/1000 + blue * 114/1000
greyim.putpixel((x,y),(value,255))
如 martineau 所述,rgb
被初始化为 RGB(三波段)图像,因此需要 RGB 值。你想要灰度,它只需要一个波段。您在这里有两个选择:
- 听从 martineau 的建议,将
rgb.putpixel((x,y),value)
换成 rgb.putpixel((x, y), (value, value, value))
。这将为它提供适当的三个颜色值。
- 在将像素放入其中之前,使用
Image.new('L',...)
创建一个新的灰度图像。
以下是您可能如何实施选项 2(请注意,我使用的是 Python 2.7):
from PIL import Image
path = "people.jpg"
img = Image.open(path)
width, height = rgb.size
gray = Image.new('L', (width, height))
for x in xrange(width):
for y in xrange(height):
r, g, b = img.getpixel((x, y))
value = r * 299.0/1000 + g * 587.0/1000 + b * 114.0/1000
value = int(value)
gray.putpixel((x, y), value)
gray.save("new.png")
此外,如果速度是一个问题,请考虑使用 putdata()
而不是 putpixel()
。 (题外话,就不赘述了。)
我想用自己的代码制作灰度图。
from PIL import Image
path = "people.jpg"
img = Image.open(path)
img = img.convert("LA")
img.save("new_image.png")
所以我将 img.convert()
更改为我自己的公式。但是没用。
from PIL import Image
path = "people.jpg"
img = Image.open(path)
rgb = img.convert("RGB")
width,height = rgb.size
for x in range(width):
for y in range(height):
red,green,blue = rgb.getpixel((x,y))
value = red * 299/1000 + green * 587/1000 + blue * 114/1000
value = int(value)
rgb.putpixel((x,y),value)
rgb.save("new.png")
知道哪里出了问题吗?新图为红色背景
灰度图像的每个像素都有一个包含两个值的元组 -(亮度值,255)。创建新的灰度图像并为每个像素赋值即可。
greyim=Image.new("LA",(width,height))
for x in range(width):
for y in range(height):
red,green,blue = rgb.getpixel((x,y))
value = red * 299/1000 + green * 587/1000 + blue * 114/1000
greyim.putpixel((x,y),(value,255))
如 martineau 所述,rgb
被初始化为 RGB(三波段)图像,因此需要 RGB 值。你想要灰度,它只需要一个波段。您在这里有两个选择:
- 听从 martineau 的建议,将
rgb.putpixel((x,y),value)
换成rgb.putpixel((x, y), (value, value, value))
。这将为它提供适当的三个颜色值。 - 在将像素放入其中之前,使用
Image.new('L',...)
创建一个新的灰度图像。
以下是您可能如何实施选项 2(请注意,我使用的是 Python 2.7):
from PIL import Image
path = "people.jpg"
img = Image.open(path)
width, height = rgb.size
gray = Image.new('L', (width, height))
for x in xrange(width):
for y in xrange(height):
r, g, b = img.getpixel((x, y))
value = r * 299.0/1000 + g * 587.0/1000 + b * 114.0/1000
value = int(value)
gray.putpixel((x, y), value)
gray.save("new.png")
此外,如果速度是一个问题,请考虑使用 putdata()
而不是 putpixel()
。 (题外话,就不赘述了。)