返回介绍

17.1 计算机图像基础

发布于 2024-01-22 21:44:06 字数 3427 浏览 0 评论 0 收藏 0

为了处理图像,你需要了解计算机如何处理图像中的顔色和坐标的基本知识,以及如何在Pillow中处理颜色和坐标。但在继续探讨之前,先要安装pillow模块。安装第三方模块请见附录A。

17.1.1 颜色和RGBA值

计算机程序通常将图像中的颜色表示为RGBA值。RGBA值是一组数字,指定顔色中的红、绿、蓝和alpha(透明度)的值。这些值是从0(根本没有)到255(最高)的整数。这些RGBA值分配给单个像素,像素是计算机屏幕上能显示一种顔色的最小点(你可以想到,屏幕上有几百万像素)。像素的RGB设置准确地告诉它应该显示哪种颜色的色彩。图像也有一个alpha值,用于生成RGBA值。如果图像显示在屏幕上,遮住了背景图像或桌面墙纸,alpha值决定了“透过”这个图像的象素,你可以看到多少背景。

在Pillow中,RGBA值表示为四个整数值的元组。例如,红色表示为(255,0,0,255)。这种颜色中红的值为最大,没有绿和蓝,并且alpha值最大,这意味着它完全不透明。绿色表示为(0,255,0,255),蓝色是(0,0,255,255)。白色是各种颜色的组合,即(255,255,255,255),而黑色没有任何颜色,是(0,0,0,255)。

如果颜色的alpha值为0,不论RGB值是什么,该颜色是不可见的。毕竟,不可见的红色看起来就像不可见的黑色一样。

Pillow使用了HTML使用的标准颜色名称。表17-1列出了一些标准颜色的名称和值。

表17-1 标准颜色名称及其RGB值

名称

RGBA值

名称

RGBA值

White

(255, 255, 255, 255)

Red

(255, 0, 0, 255)

Green

(0, 128, 0, 255)

Blue

(0, 0, 255, 255)

Gray

(128, 128, 128, 255)

Yellow

(255, 255, 0, 255)

Black

(0, 0, 0, 255)

Purple

(128, 0, 128, 255)

Pillow提供ImageColor.getcolor()函数,所以你不必记住想用的顔色的RGBA值。该函数接受一个颜色名称字符串作为第一个参数,字符串'RGBA'作为第二个参数,返回一个RGBA元组。

要了解该函数的工作方式,就在交互式环境中输入以下代码:

❶ >>> from PIL import ImageColor
❷ >>> ImageColor.getcolor('red', 'RGBA')
 (255, 0, 0, 255)
❸ >>> ImageColor.getcolor('RED', 'RGBA')
 (255, 0, 0, 255)
 >>> ImageColor.getcolor('Black', 'RGBA')
 (0, 0, 0, 255)
 >>> ImageColor.getcolor('chocolate', 'RGBA')
 (210, 105, 30, 255)
 >>> ImageColor.getcolor('CornflowerBlue', 'RGBA')
 (100, 149, 237, 255)

首先,你需要从PIL导入ImageColor模块❶(不是从Pillow,稍后你就会明白为什么)。传递给ImageColor.getcolor()的颜色名称字符串是不区分大小写的,所以传入'red'❷和传入'RED'❸将得到同样的RGBA元组。还可以传递更多的不常见的顔色名称,如'chocolate'和'Cornflower Blue'。

Pillow支持大量的颜色名称,从'aliceblue'到'whitesmoke'。在http://nostarch. com/automatestuff/的资源中,可以找到超过100种标准颜色名称的完整列表。

17.1.2 坐标和Box元组

图像像素用x和y坐标指定,分别指定像素在图像中的水平和垂直位置。原点是位于图像左上角的像素,用符号(0,0)指定。第一个0表示x坐标,它以原点处为0,从左至右增加。第二个0表示y坐标,它以原点处为0,从上至下增加。这值得重复一下:y坐标向下走增加,你可能还记得数学课上使用的y坐标,与此相反。图17-1展示了这个坐标系统的工作方式。

图17-1 27×26的图像的x和y坐标,某种古老的数据存储装置

CMYK和RGB着色

上小学时你学过,混合红、黄、蓝三种顔料可以得到其他颜色。例如,可以混合蓝色和黄色,得到绿色顔料。这就是所谓的减色模型,它适用于染料、油墨和颜料。这就是为什么彩色打印机有的CMYK墨盒:青色(蓝色)、品红色(红色)、黄色和黑色墨水可以混合在一起,形成任何颜色。

然而,光的物理使用所谓的加色模型。如果组合光(例如由计算机屏幕发出的光),红、绿和蓝光可以组合形成其他颜色。这就是为什么在计算机程序中使用RGB值表示颜色。

许多Pillow函数和方法需要一个矩形元组参数。这意味着Pillow需要一个四个整坐标的元组,表示图像中的一个矩形区域。四个整数按顺序分别是:

· 左:该矩形的最左边的x坐标。

· 顶:该矩形的顶边的y坐标。

· 右:该矩形的最右边右面一个像素的x坐标。此整数必须比左边整数大。

· 底:该矩形的底边下面一个像素的y坐标。此整数必须比顶边整数大。

注意,该矩形包括左和顶坐标,直到但不包括右和底坐标。例如,矩形元组(3, 1, 9, 6)表示图17-2中黑色矩形的所有像素。

图17-2 由矩形元组(3, 1, 9, 6)表示的区域

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文