Pillow-Image类

Pillow 方法、属性

Image类的属性:1、Format 2、Mode 3、Size 4、Palette 5、Info

类的函数:1、New 2、Open 3、Blend 4、Composite 5、Eval 6、Frombuffer 7、Fromstring 8、Merge

Image类的方法:1、Convert 2、Copy 3、Crop 4、Draft 5、Filter 6、Fromstring 7、Getbands 8、Getbbox 9、Getcolors 10、Getdata 1 1、 Getextrema 12、Getpixel 13、Histogram 14、Load 15、Paste

Image 类

Pillow的坐标系原点:图像的左上角为 (0, 0) , X轴是从左到右增长的,而Y轴是从上到下增长。
坐标系表示:矩形元组参数,(左,顶,右,底),可以理解为[左, 右)和[顶, 底)这样左闭右开的区间。
比如(3, 2, 8, 9)就表示了横坐标范围[3, 7];纵坐标范围[2, 8]的矩形区域。

  • Image.open(img_path): 打开图片,返回一个Image对象

format:图片格式
size:返回图片的宽高
mode:返回图片的模式
show():显示图片
save(img_path, mode):保存图片

  • 裁剪,调整大小

crop(left, upper, right, lower):从图片中提取一个子矩形,返回一个新Image对象
resize((width, height)): 返回新Image

  • 复制粘贴

copy(): 复制图片,不影响原图
paste(): 粘贴覆盖,在调用原图上直接修改

  • 几何变换

resize():
rotate(): 返回新Image , 逆时针旋转
transform():
transpose(): 图像的镜面翻转,返回新Image

transpose(Image.FLIP_LEFT_RIGHT): 水平翻转
transpose(Image.FLIP_TOP_BOTTOM): 垂直翻转
transpose(Image.ROTATE_90)

  • 模式转换

convert(): ‘L’ , ‘RGB’, ‘CMYK’

  • 像素点处理

getbands(): 获取图像通道名称
point(): 对图像中的像素点进行处理(例如对比度操作)
split(): 通过通道分割图像,返回元祖,元素是分割后单个通道的图像
getchannel(): 可以获取单个通道的图片,R,G,B
getpixel((x, y)): 获取单个像素位置的RGB值,返回元祖
load(): 加载图片所有的数据,通过指定坐标索引 [x,y] 获取RGB值
getdata(): 获取全部像素的值,生成器对象

R,G,B = img.split()
R = img.getchannel('R')
pixdata = img.load()
pixdata[100,200] = 255
list(img.getdata(0))

函数
  1. Image.new(mode, size, color)

    使用给定的变量mode和size生成新的图像。Size是给定的宽/高二元组,这是按照像素数来计算的。对于单通道图像,变量color只给定一个值;对于多通道图像,变量color给定一个元组(每个通道对应一个值)。
    Image.new(“RGB”, (128, 128), “red”) #图像im为128x128大小的红色图像。

  2. Image.blend(image1,image2, alpha)

    使用给定的两张图像及透明度变量alpha,插值出一张新的图像。这两张图像必须有一样的尺寸和模式。
    合成公式为:out = image1 *(1.0 - alpha) + image2 * alpha
    如果变量alpha为0.0,将返回第一张图像的拷贝。如果变量alpha为1.0,将返回第二张图像的拷贝。对变量alpha的值没有限制。
    Image.blend(im1,im2,0.5)

  3. Image.composite(image1,image2, mask)

    使用给定的两张图像及mask图像作为透明度,插值出一张新的图像。变量mask图像的模式可以为“1”,“L”或者“RGBA”。所有图像必须有相同的尺寸。

  4. Image.eval(image,function)

    使用变量function对应的函数(该函数应该有一个参数)处理变量image所代表图像中的每一个像素点。如果变量image所代表图像有多个通道,那变量function对应的函数作用于每一个通道。
    注意:变量function对每个像素只处理一次,所以不能使用随机组件和其他生成器。
    from PIL import Image
    im = Image.open(“jing.jpg”)
    def deffun©:
    return c*0.89 #改变了亮度
    im_eval = Image.eval(im,deffun)

  5. Image.merge(mode,bands)

    使用一些单通道图像,创建一个新的图像。变量bands为一个图像的元组或者列表,每个通道的模式由变量mode描述。所有通道必须有相同的尺寸。
    im1 = Image.open(“jing.jpg”)
    im2 = Image.open(“wu.jpg”)
    r1,g1,b1 = im1.split()
    r2,g2,b2 = im2.split()
    imgs =[r1,g2,b2]
    im_merge = Image.merge(“RGB”,imgs)


类方法
  1. im.convert(mode,matrix)

    将当前图像转换为其他模式,并且返回新的图像。

  2. im.copy()

    拷贝这个图像。如果用户想粘贴一些数据到这张图,可以使用这个方法,但是原始图像不会受到影响。

  3. im.crop(box)

    从当前的图像中返回一个矩形区域的拷贝。变量box是一个四元组,定义了左、上、右和下的像素坐标。
    对源图像的改变可能或者可能不体现在裁减下来的图像中。为了获取一个分离的拷贝,对裁剪的拷贝调用方法load()。

  4. im.filter(filter)

    返回一个使用给定滤波器处理过的图像的拷贝。可用滤波器需要参考ImageFilter模块。

  5. im.histogram()

    返回一个图像的直方图。这个直方图是关于像素数量的list,图像中的每个象素值对应一个成员。如果图像有多个通道,所有通道的直方图会连接起来(例如,“RGB”图像的直方图有768个值)。
    二值图像(模式为“1”)当作灰度图像(模式为“L”)处理。

  6. im.load()

    为图像分配内存并从文件中加载它

  7. im.paste(image,box)

    将一张图粘贴到另一张图像上。变量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的绿色方块。         
    
  8. im.point(table)

    返回给定查找表对应的图像像素值的拷贝。变量table为图像的每个通道设置256个值。如果使用变量function,其对应函数应该有一个参数。这个函数将对每个像素值使用一次,结果表格将应用于图像的所有通道。

  9. im.resize(size, filter)

    返回改变尺寸的图像的拷贝。变量size是所要求的尺寸,是一个二元组:(width, height)。
    变量filter为NEAREST、BILINEAR、BICUBIC或者ANTIALIAS之一。如果忽略,或者图像模式为“1”或者“P”,该变量设置为NEAREST。

  10. im.rotate(angle,filter=NEAREST, expand=0)

    返回一个按照给定角度顺时钟围绕图像中心旋转后的图像拷贝。
    变量filter应该是NEAREST、BILINEAR或者BICUBIC之一。如果省略该变量,或者图像模式为“1”或者“P”,则默认为NEAREST。
    变量expand,如果为true,表示输出图像足够大,可以装载旋转后的图像。如果为false或者缺省,则输出图像与输入图像尺寸一样大。

  11. im.save(outfile, format, options…)

    使用给定的文件名保存图像。如果变量format缺省,如果可能的话,则从文件名称的扩展名判断文件的格式。该方法返回为空。
    关键字options为文件编写器提供一些额外的指令。如果编写器不能识别某个选项,它将忽略它。
    用户可以使用文件对象代替文件名称。在这种情况下,用户必须指定文件格式。文件对象必须实现了seek()、tell()和write()方法,且其以二进制模式打开。
    如果方法save()因为某些原因失败,这个方法将产生一个异常(通常为IOError异常)。如果发生了异常,该方法也有可能已经创建了文件,并向文件写入了一些数据。如果需要的话,用户的应用程序可以删除这个不完整的文件。

  12. im.seek(frame)

    在给定的文件序列中查找指定的帧。如果查找超越了序列的末尾,则产生一个EOFError异常。当文件序列被打开时,PIL库自动指定到第0帧上。

  13. im.tell()

    返回当前帧所处位置,从0开始计算。

  14. im.transpose(method)

    返回当前图像的翻转或者旋转的拷贝。
    变量method的取值为:FLIP_LEFT_RIGHT,FLIP_TOP_BOTTOM,ROTATE_90,ROTATE_180,或者ROTATE_270。

  15. im.split()

    返回当前图像各个通道组成的一个元组。例如,分离一个“RGB”图像将产生三个新的图像,分别对应原始图像的每个通道(红,绿,蓝)。


  • 图像过滤 , ImageFilter

im = Image.open(im_path)

-高斯模糊
im.filter(ImageFilter.GaussianBlur).save(new_path)

-普通模糊
im.filter(ImageFilter.BLUR).save(new_path)

-边缘增强
im.filter(ImageFilter.EDGE_ENHANCE).save(new_path)

-找到边缘
im.filter(ImageFilter.FIND_EDGES).save(new_path)

-浮雕
im.filter(ImageFilter.EMBOSS).save(new_path)

-轮廓
im.filter(ImageFilter.CONTOUR).save(new_path)

-锐化
im.filter(ImageFilter.SHARPEN).save(new_path)

-平滑
im.filter(ImageFilter.SMOOTH).save(new_path)

-细节
im.filter(ImageFilter.DETAIL).save(new_path)

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值