python3 image模块_python image模块

本文详细介绍了Python3中的PIL库中的Image模块,包括如何打开、旋转和显示图像,创建缩略图,以及Image模块提供的各种函数如new、open、blend等。通过示例展示了如何使用这些函数进行图像处理,例如使用Image.open加载图片,用Image.rotate旋转图片,利用Image.thumbnail创建缩略图。此外,还提到了一些常用的方法,如convert、crop、filter、paste和resize等。
摘要由CSDN通过智能技术生成

Image 模块

Image 模块提供了同名的类用来表示PIL的图像。Image模块还提供了许多工厂(factory)函数,包块从文件加载图像的函数,以及创建新图像的函数。

例子

下面的脚本加载了一个图像,并把它旋转了45度,然后调用外部的查看器(通常在Unix下是xv,Windows下是paint)。

打开,旋转,和显示图像(使用默认的查看器)

from PIL import Image

im = Image.open("bride.jpg")

im.rotate(45).show()

下面的脚本为当前目录下所以的JPEG图像创建漂亮128x128的缩略图。

创建缩略图

from PIL import Image

import glob, os

size = 128, 128

for infile in glob.glob("*.jpg"):

file, ext = os.path.splitext(infile)

im = Image.open(infile)

im.thumbnail(size, Image.ANTIALIAS)

im.save(file + ".thumbnail", "JPEG")

函数

new

Image.new(mode, size) => image

Image.new(mode, size, color) => image

以指定的模式和大小创建一个新图像。大小以2元元组的形式给出。给colour赋单个值,表示要创建单波段图像,元组表示创建多波段图像(每个波段一个值)。如果忽略colour参数,图像将以黑色填充。如果colour设为None,图像不会被初始化。

open

Image.open(infile) => image

Image.open(infile, mode) => image

打开并识别给定图像文件。这是一个偷懒的操作;真正的图像数据只有到处理的时候才会被读入(调用load函数强制加载)。如果给出了模式(mode)参数,它必须设为“r”。

要打开图像,即可以使用字符串(表示文件名)也可以使用文件对象。对后一种情况,文件对象必须实现了read,seek,和 tell 方法,并以二进制模式打开。

blend

Image.blend(image1, image2, alpha) => image

通过使用alpha常量,在图像进行差值操作,创建新图像。两个图像必须具有相同的大小和模式。

out = image1 * (1.0 - alpha) + image2 * alpha

(注:没有成功)

如果设置alpha为0.0,将返回第一个图像的拷贝。如果设置alpha为1.0,将返回第二个图像的拷贝。对alpha的值没有限制。必要的话,结果会被剪裁,以适合允许的输出范围。

composite

Image.composite(image1, image2, mask) => image

使用遮罩(mask)作为alpha,通过在两个图像之间进行插值来创建一个新图像。遮罩图像的模式可以是“1”,“L”,或者“RGBA”。所有的图像的大小必须有相同。

eval

Image.eval_r(image, function) => image

把函数(function)(应该接收一个参数)应用到所给图像的每一个像素。如果图像有多个波段,相同的函数会应用到每一个波段。注意,该函数对每一个可能的像素值只计算一次,所有不能使用随机组件(components)或者其它发生器(generators)。

frombuffer

Image.frombuffer(mode, size, data) => image

(PIL1.1.4添加)。使用标准的“raw”解码器,把来自字符串或者缓冲区(buffer)对象的图像数据创建为一个图像内存(image memory)。对于某些模式,图像内存会和原来的缓冲区共享内存(这意味着对原始缓冲区对象的修改会影响图像)。不是所有的模式都能共享内存;支持共享内存的模式包括:“L”,“RGBX”,“RGBA”和“CMYK”。对其其它模式,这个函数的作用与fromstring函数类似。

注意:1.1.6版中,默认的方向与fromstring的不同。这些可能会在未来的版本中发生变化,所以为了最大的兼容性,建议在使用“raw”解码器的时候给出所有的参数。

im = Image.frombuffer(mode, size, data, "raw", mode, 0, 1)Image.frombuffer(mode, size, data, decoder, parameters) => image

与调用fromstring 相同。

fromstring

Image.fromstring(mode, size, data) => image

使用标准的“raw”解码器从来自字符串的像素数据创建一个图像内存。

Image.fromstring(mode, size, data, decoder, parameters) => image

也一样,但是允许你使用PIL支持的任何像素解码器。关于可用解码器的更多信息,参见Writing Your Own File Decoder节

注意,这个函数只对像素数据解码,而不是整个图像。如果字符串中包含了一个完整的图像文件,可以使用StringIO对象对它进行处理,并使用open函数加载图像。

merge

Image.merge(mode, bands) => image

从几个单波段图像创建一个新图像。bands参数是包含图像的元组或列表,一个图像对应模式中描述的一个波段。所有波段的图像必须有相同的大小。

方法

一个Image类的实例具有下列方法。除非另外指出,所有的方法都返回一个新的Image类的实例,包含处理过的图像数据。

convert

im.convert(mode) => image

返回图像转换后的副本

如果原始图像是调色板图像,这个函数通过调色板转换像素。忽略mode参数,会自动选择一个模式,以保证所有的图像信息和调色板信息在没有调色板的时候也能表示出来。

从彩色图像转换到黑白图像时,图像库使用ITU-R 601-2 luma转换:

L = R * 299/1000 + G * 587/1000 + B * 114/1000在把图像转换为二值图(bilevel image)(模式“1”)时,源图像首先被转换为黑白图。然后在结果中,值大于127的像素点被设置为白色,图像抖动(and the image is dithered)。使用point方法可以改变阈值。

im.convert(mode, matrix) => image

使用转换矩阵,把一个 "RGB" 图像转换为 "L" 或者 "RGB" 图像。其中矩阵是一个4元或16元元组。

下面的例子把一个RGB图像转换(根据ITU-R 709进行线性校正,using the D65 luminant)到CIE XYZ颜色空间:

Convert RGB to XYZ

rgb2xyz = (

0.412453, 0.357580, 0.180423, 0,

0.212671, 0.715160, 0.072169, 0,

0.019334, 0.119193, 0.950227, 0 )

out = im.convert("RGB", rgb2xyz)

copy

im.copy() =>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值