📜  Python Pillow – 图像上的颜色

📅  最后修改于: 2022-05-13 01:54:51.472000             🧑  作者: Mango

Python Pillow – 图像上的颜色

在本文中,我们将使用Python的 Pillow 模块学习图像上的颜色。让我们讨论一些概念:

  • Python Imaging Library 中的一个关键类是 Image 类。它在 Image 模块中定义,并提供一个 PIL 图像,通常在其上管理操作操作。此类的实例通常以多种方式创建:通过从文件加载图像、从头开始创建图像,或作为处理其他图像的结果。我们将看到所有这些都在使用中。
  • 任何图像都由像素组成,每个像素代表图像中的一个点。一个像素包含三个值,每个值的范围在 0 到 255 之间,分别代表红色、绿色和蓝色分量的数量。这些的组合形成像素的实际颜色。
  • ImageColor模块包含颜色表和从 CSS3 样式颜色说明符到 RGB 元组的转换器。该模块由 PIL.Image.Image.new() 和 ImageDraw 模块等使用。

ImageColor 模块,包含各种表示颜色的格式。这些格式如下:

  • 字符串:颜色也可以表示为字符串,如红色、绿色、蓝色、黄色。它们不区分大小写。
  • 十六进制颜色:表示为:#rgb 或 #rrggbb。例如-#ffff00 代表黄色,其中红色为 255,绿色为 255,蓝色为 0。RGB 将是一个元组-(255,255,0)
  • 圆柱形:表示为 HSL,其中 H-色调、S-饱和度和 L-亮度。例如-#ffff00 代表黄色,其中色调为 0.63,饱和度为 1.00,亮度值为 0.50。

用颜色创建图像

在这里,我们将使用 Image.new() 方法创建带有颜色的图像。

PIL.Image.new()方法创建一个具有给定模式和大小的新图像。大小以(宽度,高度)元组的形式给出,以像素为单位。对于单波段图像,颜色作为单个值给出,对于多波段图像给出一个元组(每个波段一个值)。我们也可以使用颜色名称。如果省略 color 参数,则图像填充为零(这通常对应于黑色)。如果颜色为 None,则不初始化图像。如果您要在图像中粘贴或绘制内容,这会很有用。

Python3
from PIL import Image
  
# color --> "red" or (255,0,0) or #ff0000
img = Image.new('RGB',(200,200),(255,0,0))
img.show()


Python3
# importing module
from PIL import ImageColor
  
# using getrgb for yellow
img1 = ImageColor.getrgb("yellow")
print(img1)
  
# using getrgb for red
img2 = ImageColor.getrgb("red")
print(img2)


Python3
# importing module
from PIL import ImageColor
  
# using getrgb for yellow
img1 = ImageColor.getcolor("yellow",'L')
print(img1)
  
# using getrgb for red
img2 = ImageColor.getcolor("red",'L')
print(img2)


Python3
from PIL import Image
  
  
img = Image.open("flower.jpg")
img = img.convert("RGB")
  
d = img.getdata()
  
new_image = []
for item in d:
    
    # change all white (also shades of whites)
    # pixels to yellow
    if item[0] in list(range(200, 256)):
        new_image.append((255, 224, 100))
    else:
        new_image.append(item)
          
# update image data
img.putdata(new_image_data)
  
# save new image
img.save("flower_image_altered.jpg")


输出:

将颜色字符串转换为 RGB 颜色值

使用 ImageColor 模块,我们还可以将颜色转换为 RGB 格式(RGB 元组),因为 RGB 非常方便执行不同的操作。为此,我们将使用 ImageColor.getgrb() 方法。 ImageColor.getrgb()将颜色字符串转换为 RGB 元组。如果无法解析字符串,则此函数会引发 ValueError 异常。

蟒蛇3

# importing module
from PIL import ImageColor
  
# using getrgb for yellow
img1 = ImageColor.getrgb("yellow")
print(img1)
  
# using getrgb for red
img2 = ImageColor.getrgb("red")
print(img2)

输出:

(255, 255, 0)
(255, 0, 0)

将颜色字符串转换为灰度值

ImageColor.getcolor()getrgb()相同,但如果模式不是彩色或调色板图像,则将 RGB 值转换为灰度值。如果无法解析字符串,则此函数会引发 ValueError 异常。

蟒蛇3

# importing module
from PIL import ImageColor
  
# using getrgb for yellow
img1 = ImageColor.getcolor("yellow",'L')
print(img1)
  
# using getrgb for red
img2 = ImageColor.getcolor("red",'L')
print(img2)

输出:



226
76

通过改变像素值来改变颜色

我们还可以将图像的颜色更改为其他颜色。

输入图像:

蟒蛇3

from PIL import Image
  
  
img = Image.open("flower.jpg")
img = img.convert("RGB")
  
d = img.getdata()
  
new_image = []
for item in d:
    
    # change all white (also shades of whites)
    # pixels to yellow
    if item[0] in list(range(200, 256)):
        new_image.append((255, 224, 100))
    else:
        new_image.append(item)
          
# update image data
img.putdata(new_image_data)
  
# save new image
img.save("flower_image_altered.jpg")

输出: