Python Pillow – 图片上的颜色
在这篇文章中,我们将使用Python中的Pillow模块学习图像的颜色。让我们来讨论一些概念。
- 在Python图像库中,一个重要的类是图像类。它被定义在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()方法以给定的模式和尺寸创建一个新图像。尺寸是一个(宽,高)的元组,单位是像素。颜色对于单波段图像来说是一个单值,对于多波段图像来说是一个元组(每个波段有一个值)。我们也可以使用颜色名称。如果颜色参数被省略,图像将被填充为零(这通常对应于黑色)。如果颜色是None,图像就不会被初始化。如果你要在图像中粘贴或绘制东西,这可能很有用。
语法:PIL.Image.new(mode, size, color)
参数:
- mode:新图像要使用的模式。(可以是RGB、RGBA)
- size:一个包含(宽度,高度)像素的2元组。
- color: 图片要使用什么颜色。默认为黑色。如果给定,对于单波段模式,这应该是一个单一的整数或浮点值,对于多波段模式,则是一个元组。
返回值:一个图像对象。
from PIL import Image
# color --> "red" or (255,0,0) or #ff0000
img = Image.new('RGB',(200,200),(255,0,0))
img.show()
输出:
将颜色字符串转换为RGB颜色值
使用ImageColor模块,我们也可以将颜色转换成RGB格式(RGB元组),因为RGB对于执行不同的操作非常方便。要做到这一点,我们将使用ImageColor.getgrb()方法。ImageColor.getrgb() 将一个颜色字符串转换成RGB元组。如果字符串不能被解析,这个函数会引发一个ValueError异常。
语法: PIL.ImageColor.getrgb(color)
参数:
- color: A color string
返回: (red, green, blue[, alpha])
# 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异常。
语法: PIL.ImageColor.getcolor(color, mode)
参数:
- color – A color string
返回: (graylevel [, alpha]) or (red, green, blue[, alpha])
# 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
通过改变像素值来改变颜色
我们还可以将图像的颜色改为其他颜色。
输入图片:
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")
输出: