Python图片处理模块PIL(pillow)(3)
三、Image类的方法
除非另作说明,Image类的所有方法都将返回一个Image类的新实例,这个实例对应于结果图像。
1、 Convert
定义1:im.convert(mode)? image 含义1:将当前图像转换为其他模式,并且返回新的图像。 当从一个调色板图像转换时,这个方法通过这个调色板来转换像素。如果不对变量mode赋值,该方法将会选择一种模式,在没有调色板的情况下,使得图像和调色板中的所有信息都可以被表示出来。 当从一个颜色图像转换为黑白图像时,PIL库使用ITU-R601-2 luma转换公式: L = R * 299/1000 + G * 587/1000 + B * 114/1000 当转换为2位图像(模式“1”)时,源图像首先被转换为黑白图像。结果数据中大于127的值被设置为白色,其他的设置为黑色;这样图像会出现抖动。如果要使用其他阈值,更改阈值127,可以使用方法point()。 为了去掉图像抖动现象,可以使用dither选项。 例子1: from PIL import Image im1 = Image.open("jing.jpg") print(im1.mode) im_c = im1.convert("1") im_c.save("he.jpg") print(im_c.mode) 输出: 注:将“RGB”模式的im01图像,转换为“1”模式的im_c图像。 定义2:im.convert(“P”,**options) ? image 含义2:这个与第一个方法定义一样,但是当“RGB”图像转换为8位调色板图像时能更好的处理。可供选择的选项为: Dither=. 控制颜色抖动。默认是FLOYDSTEINBERG,与邻近的像素一起承担错误。不使能该功能,则赋值为NONE。 Palette=. 控制调色板的产生。默认是WEB,这是标准的216色的“web palette”。要使用优化的调色板,则赋值为ADAPTIVE。 Colors=. 当选项palette为ADAPTIVE时,控制用于调色板的颜色数目。默认是最大值,即256种颜色。 定义3:im.convert(mode,matrix) ? image 含义3:使用转换矩阵将一个“RGB”图像转换为“L”或者“RGB”图像。变量matrix为4或者16元组。 例子3:下面的例子将一个RGB图像(根据ITU-R709线性校准,使用D65亮度)转换到CIE XYZ颜色空间: from PIL import Image im1 = Image.open("jing.jpg") im1.mode rgb2xyz = ( 0.412453, 0.357580, 0.180423, 0, 0.212671, 0.715160, 0.072169, 0, 0.019334, 0.119193, 0.950227, 0 ) im_c3 = im1.convert("L", rgb2xyz) im_c3.save("he.jpg") print(im_c3.mode) 输出: L
2、 Copy
定义:im.copy() ? image 含义:拷贝这个图像。如果用户想粘贴一些数据到这张图,可以使用这个方法,但是原始图像不会受到影响。 例子: from PIL import Image im1 = Image.open("jing.jpg") im2 = im1.copy() im2.save("he.jpg") 注:图像im_copy和im01完全一样。
3、 Crop
定义:im.crop(box) ? image 含义:从当前的图像中返回一个矩形区域的拷贝。变量box是一个四元组,定义了左、上、右和下的像素坐标。 这是一个懒操作。对源图像的改变可能或者可能不体现在裁减下来的图像中。为了获取一个分离的拷贝,对裁剪的拷贝调用方法load()。 例子: from PIL import Image im1 = Image.open("jing.jpg") print(im1.size) box = [0,0,650,400] #650(长)400(高) im_crop = im1.crop(box) im_crop.save("he.jpg")
4、 Draft
定义:im.draft(mode,size) 含义:配置图像文件加载器,使得返回一个与给定的模式和尺寸尽可能匹配的图像的版本。例如,用户可以使用这个方法,在加载一个彩色JPEG图像时将其转换为灰色图像,或者从一个PCD文件中提取一个128x192的版本。 注意:这个方法会适时地修改图像对象(精确地说,它会重新配置文件的读取器)。如果图像已经被加载,那这个方法就没有作用了。 例子: from PIL import Image im1 = Image.open("jing.jpg") im_draft = im1.draft("L",(500,500)) print(im_draft.size) im_draft.save("he.jpg") 输出: (650, 650)
5、 Filter
定义:im.filter(filter) ? image 含义:返回一个使用给定滤波器处理过的图像的拷贝。可用滤波器需要参考ImageFilter模块 例子: from PIL import Image,ImageFilter im1 = Image.open("jing.jpg") im_filter = im1.filter(ImageFilter.BLUR) im_filter.save("he.jpg") 注:图像im_filter比im01变得有些模糊了。
6、 Fromstring
定义:im.fromstring(data) im.fromstring(data, decoder,parameters) 含义:与函数fromstring()一样,但是这个方法会将data加载到当前的图像中。
7、 Getbands
定义:im.getbands()? tuple of strings 含义:返回包括每个通道名称的元组。例如,对于RGB图像将返回(“R”,“G”,“B”)。
8、 Getbbox
定义:im.getbbox() ? 4-tuple or None 含义:计算图像非零区域的包围盒。这个包围盒是一个4元组,定义了左、上、右和下像素坐标。如果图像是空的,这个方法将返回空。 例子: from PIL import Image im1 = Image.open("jing.jpg") print(im1.getbbox()) 输出: (0, 0, 650, 650)
9、 Getcolors
定义:im.getcolors() ? a list of(count, color) tuples or None im.getcolors(maxcolors) ? a list of (count, color) tuples or None 含义:(New in 1.1.5)返回一个(count,color)元组的无序list,其中count是对应颜色在图像中出现的次数。 如果变量maxcolors的值被超过,该方法将停止计算并返回空。变量maxcolors默认值为256。为了保证用户可以获取图像中的所有颜色,you can pass in size[0]*size[1](请确保有足够的内存做这件事)。 例子: from PIL import Image im1 = Image.open("test.png") print(im1.getcolors(8888888)) 输出: [(2, (255, 255, 255, 233)), (9, (0, 0, 0, 136)), (1, (0, 0, 0, 64)), (2, (0, 0, 0, 24)), (5, (0, 0, 0, 56)).......
10、 Getdata
定义:im.getdata() ? sequence 含义:以包含像素值的sequence对象形式返回图像的内容。这个sequence对象是扁平的,以便第一行的值直接跟在第零行的值后面,等等。 注意:这个方法返回的sequence对象是PIL内部数据类型,它只支持某些sequence操作,包括迭代和基础sequence访问。使用list(im.getdata()),将它转换为普通的sequence。 例子: from PIL import Image im1 = Image.open("jing.jpg") seq = im1.getdata() print(seq[0]) seq0 = list(seq) print(seq0[0]) print(len(seq0)) 输出: (41, 183, 197) (41, 183, 197) #这个值是长和高之积 注:Sequence对象的每一个元素对应一个像素点的R、G和B三个值。
11、 Getextrema
定义:im.getextrema() ? 2-tuple 含义:返回一个2元组,包括该图像中的最小和最大值。 例子: from PIL import Image im1 = Image.open("jing.jpg") print(im1.getextrema()) 输出: ((0, 255), (0,255), (0, 255)) 该方法返回了R/G/B三个通道的最小和最大值的2元组。
12、 Getpixel
定义:im.getpixel(xy) ? value or tuple 含义:返回给定位置的像素值。如果图像为多通道,则返回一个元组。 注意:该方法执行比较慢;如果用户需要使用python处理图像中较大部分数据,可以使用像素访问对象(见load),或者方法getdata()。 例子: from PIL import Image im1 = Image.open("jing.jpg") print(im1.getpixel((1,1))) print(im1.getpixel((649,649))) 输出: (41, 183, 197) (236, 210, 153) 注:im.getpixel(xy)中的X,Y表示坐标,从0开始。
13、 Histogram
定义1:im.histogram()? list 含义1:返回一个图像的直方图。这个直方图是关于像素数量的list,图像中的每个象素值对应一个成员。如果图像有多个通道,所有通道的直方图会连接起来(例如,“RGB”图像的直方图有768个值)。 二值图像(模式为“1”)当作灰度图像(模式为“L”)处理。 例子1: from PIL import Image im1 = Image.open("jing.jpg") ls = im1.histogram() print(len(ls)) print(ls[767]) 输出: 1471
14、 Load
定义:im.load() 含义:为图像分配内存并从文件中加载它(或者从源图像,对于懒操作)。正常情况下,用户不需要调用这个方法,因为在第一次访问图像时,Image类会自动地加载打开的图像。 (New in 1.1.6)在1.1.6及以后的版本,方法load()返回一个用于读取和修改像素的像素访问对象。这个访问对象像一个二维队列,如: pix = im.load() print pix[x, y] pix[x, y] =value 通过这个对象访问比方法getpixel()和putpixel()快很多。 例子: from PIL import Image im1 = Image.open("jing.jpg") lm_load = im1.load() print(lm_load[649,649]) 输出: (236, 210, 153)
15、 Paste
定义1:im.paste(image,box) 含义1:将一张图粘贴到另一张图像上。变量box或者是一个给定左上角的2元组,或者是定义了左,上,右和下像素坐标的4元组,或者为空(与(0,0)一样)。如果给定4元组,被粘贴的图像的尺寸必须与区域尺寸一样。 如果模式不匹配,被粘贴的图像将被转换为当前图像的模式。 例子1: from PIL import Image im1 = Image.open("jing.jpg") box = [0,0,200,200] im_crop = im1.crop(box) im1.paste(im_crop,(200,200,400,400)) #等价于im1.paste(im_crop,(200,200)) im1.save("he.jpg") 定义2:im.paste(colour,box) 含义2:它与定义1一样,但是它使用同一种颜色填充变量box对应的区域。对于单通道图像,变量colour为单个颜色值;对于多通道,则为一个元组。 例子2: from PIL import Image im1 = Image.open("jing.jpg") im1.paste((256,256,256),(200,100,500,200)) im1.save("he.jpg") 注:图像im1的(200,100)位置将出现一个300x100的白色方块,对于多通道的图像,如果变量colour只给定一个数值,将只会应用于图像的第一个通道。如果是“RGB”模式的图像,将应用于红色通道。 定义3:im.paste(image,box, mask) 含义3:与定义1一样,但是它使用变量mask对应的模板图像来填充所对应的区域。可以使用模式为“1”、“L”或者“RGBA”的图像作为模板图像。模板图像的尺寸必须与变量image对应的图像尺寸一致。 如果变量mask对应图像的值为255,则模板图像的值直接被拷贝过来;如果变量mask对应图像的值为0,则保持当前图像的原始值。变量mask对应图像的其他值,将对两张图像的值进行透明融合。 注意:如果变量image对应的为“RGBA”图像,即粘贴的图像模式为“RGBA”,则alpha通道被忽略。用户可以使用同样的图像作为原图像和模板图像。 例子3: from PIL import Image im1 = Image.open("jing.jpg") box = [100,100,200,200] im_crop = im1.crop(box) r,g,b = im_crop.split() im1.paste(im_crop,(200,100,300,200),b) im1.save("he.jpg") 注:在图像im1的(0,0)位置将出现一个半透明的100x100的方块。 定义4:im.paste(colour,box, mask) 含义4:与定义3一样,只是使用变量colour对应的单色来填充区域。 例子4: from PIL import Image im1 = Image.open("jing.jpg") box = [100,100,200,200] im_crop = im1.crop(box) r,g,b = im_crop.split() im1.paste((0,256,0),(200,100,300,200),b) im1.save("he.jpg") 注:在图像im1的(0,0)位置将出现一个100x100的绿色方块。
本文暂时没有评论,来添加一个吧(●'◡'●)