Python图像处理教程(Pillow)6 Image类

Image类简介

Image模块是Pillow库的核心部分。它是用来存储所有类型的图像的主类,它还包含大量的函数方法,用于以各种方式处理图像。

Image 类的重要功能:

  • 创建图像。

  • 保存图像。

  • 图像生成器。

  • 图像带

  • 图像属性和统计。

  • 像素访问 - 如何有效地读写像素。

  • 与其他库集成 - 如何有效地交换图像数据。

  • 图像操作(旋转、转置等

  • 图像合成(混合等)

  • 图像过滤(过滤功能)

Image模块还包含添加扩展的功能,例如,处理某些图像格式的特殊编码方案。这是一个非常专业的领域,扩展通常是用C语言编写。

创建图像

Image.new

Image.open

open也接受一个格式参数。

boat_image = Image.open("boat-small.jpg", formats=['PNG', 'JPEG'])

open通常会尝试打开任何支持格式的图像文件,但如果你提供了一个格式列表,它将只尝试打开这些格式的图像。如果你想避免意外地打开一些晦涩难懂的格式,而这些格式可能有你的应用程序不支持的功能,这就很有用。

open通过检查文件来确定文件的类型。它不关注文件的扩展名。因此,举例来说,如果一个PNG文件被意外地以.jpg为扩展名保存,上面的代码将毫无错误地打开PNG文件。

这段代码只允许JPEG图像。

boat_image = Image.open("boat-small.jpg", formats=['JPEG'])

如果该文件真的是JPEG文件,这段代码将打开该文件,但如果该文件是其他格式,则会引发错误。

你也可以提供读取模式下打开的文件对象,而不是文件名。

copy

copy方法创建图像的新副本。

image2 = image.copy()

其他方法

你可以从数据中创建图像,以内存数组的形式(比如NumPy数组),你可以使用fromarray, frombuffer, 或frombytes方法从数据中创建图像。

保存图像

你可以使用save方法来保存图像,像这样。

image.save('boat.png')

该函数将使用文件扩展名来决定使用哪种文件格式,所以在上面的例子中它将创建一个PNG文件。

你可以指定一种格式。

image.save('boat.png', format=PNG)

这将以PNG格式存储图像,而不管文件扩展名是什么。如果你想用非标准的扩展名来存储图像(例如.dat而不是.png),这很有用。

除了文件名,你也可以提供以写模式打开的文件对象。在这种情况下,你应该提供格式参数,因为Pillow不知道目标文件名。

图像生成器

Pillow自带了一些随机图像生成器函数。

除了effect_mandelbro,effect_noise生成噪声图像。

noise = Image.effect_noise(size=(256, 256), sigma=32)

图像大小为256×256像素,图像被填充高斯噪声,根据高斯分布将每个像素设置为0到255之间的随机值,以128为中心。西格玛值控制着数值的分散程度。

linear_gradient创建从0到255(黑到白)的梯度图像。图像大小固定为256像素的正方形,所以唯一的参数是模式。它必须是一个灰度模式,所以明显的选择是'L'。你也可以使用'P'来创建一个基于调色板的灰度图像。

image = Image.linear_gradient('L')

radial_gradient可以用来创建径向梯度。

image = Image.radial_gradient('L')

处理图像带

在RGB图像中,每个像素都包含红色、绿色和蓝色分量。在Pillow中,这些分量被称为带。

getbands

getbands方法返回包含图像中每个带的单字母名称的元组。

bands = image.getbands()

对于一个RGB图像,该函数返回('R', 'G', 'B')。对于RGBA图像,它返回('R', 'G', 'B', 'A'),以此类推。

分割

split方法将图像分割成多个图像,每个图像包含原图像的一个频段。

red_image, green_image, blue_image = image.split()

原始图像被分割成3个部分。red_image是一个灰度图像,只包含图像的红色部分,green_image和blue_image的情况类似。

在这个图像中,暗区是图像中含有很少红色的部分,亮区是图像中含有大量红色的部分。

merge

merge功能的作用与分割相反。它取几个单频带图像,并将其合并形成彩色图像。

mixed_image = Image.merge('RGB', [red_image, green_image, blue_image])

上面的代码合并了我们之前创建的三个波段,所以它将产生与原始图像相同的图像。

blank = Image.new('L', image.size)
red_sep = Image.merge('RGB', [red_image, blank, blank])
red_sep.save('red_sep.png')

getchannel

如果你只想要波段,getchannel也可以。

red_image = image.getchannel('R')

波段可以通过名称(如'R'、'G'、'B',因为它们出现在getbands中)或索引号(0、1、2...)来识别。

putalpha

putalpha方法可以用来给图像添加alpha带(或者替换当前的alpha带,如果已经有)。这是一个为现有图像添加透明度的好方法。

在这个例子中,我们将使用一个渐变色(radial gradient)作为我们的alpha通道。

以下是将这个图像作为alpha通道应用到船形图像的代码。

vignette_image = Image.open('vignette.png').getchannel(0)
image.putalpha(vignette_image)

vignette图像是一个RGB图像,但我们需要单波段的图像作为putalpha。这没有问题,我们可以简单地使用getchannel(0)来提取第一个波段。

putalpha将渐变体作为alpha通道添加到图像中。这就把图像从RGB转换为RGBA。这里是结果的图像。

图像的边缘渐渐消失了--这是因为它越来越透明,所以白页显示出来了。

参考资料

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,734评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,931评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,133评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,532评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,585评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,462评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,262评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,153评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,587评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,792评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,919评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,635评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,237评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,855评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,983评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,048评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,864评论 2 354

推荐阅读更多精彩内容