Python Pillow – 图片上的颜色

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()

输出:

Python Pillow - 图片上的颜色

将颜色字符串转换为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

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

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

输入图片:

Python Pillow - 图片上的颜色

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")

输出:

Python Pillow - 图片上的颜色

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

Python pil