zoukankan      html  css  js  c++  java
  • python PIL 图像处理

    Image模块

    Image模块是在Python PIL图像处理中常见的模块内。如open、save、conver、show...等功能
    open(filename,mode)(打开一张图像)。

    from PIL import Image
    im = Image.open("./static/gikki.jpg")
    im.show()
    

    在win的环境下im.show的方式为win自带的图像显示应用。打开并确认给定的图像文件。这个是一个懒操作;该函数只会读文件头,而真实图像数据直到尝试处理该数据才会从文件读取(调用Load()方法将强行加载图像数据)。如果变量Mode被设置,那必须是"r"。用户可以使用一个字符串(表示文件名称的字符串)或者文件对象作为变量file的值。文件对象必须实现read(),seek()和tell()方法,并且以二进制模式打开。

    Save类

    from PIL import Image
    im = image.open("./static/gikki.jpg")
    print(im)
    # 保存为png
    im.save("./static/gikki.png")
    print(im.format,im.size,im.mode)
    
    

    Form类

    from PIL import Image
    im = image.open("./static/gikki.jpg")
    print(im.format) # 打印出格式信息
    im.show()
    

    Mode类

    modes 描述
    1 1位像素,黑色和白色,存成8位的像素
    L 8位像素,黑白
    P 8位像素,使用调色板映射到任何其他模式
    RGB 3×8位像素,真彩
    RGBA 4×8位像素,真彩+透明通道
    CMYK 4×8位像素,颜色隔离
    YCbCr 3×8位像素,彩色视频格式
    I 32位整型像素
    F 32位浮点像素
    from PIL import Image
    im = image.open("./static/gikki.jpg")
    print(im.mode) ## 打印出模式信息
    im.show()
    
    e^{ipi} + 1 = 0
    

    convert类

    将当前图像转换为其他模式,并且返回新的图像。当从一个调色板图像转换时,这个方法通过这个调色板来转换像素。如果不对变量mode赋值,该方法将会选择一种模式,在没有调色板的情况下,使得图像和调色板中的所有信息都可以被表示出来。当从一个颜色图像转换为黑白图像时,PIL库使用ITU-R601-2 luma转换公式:
    L = R * 299/1000 + G * 587/1000 + B * 114/1000
    当转换为2位图像(模式“1”)时,源图像首先被转换为黑白图像。结果数据中大于127的值被设置为白色,其他的设置为黑色;这样图像会出现抖动。如果要使用其他阈值,更改阈值127,可以使用方法point()。为了去掉图像抖动现象,可以使用dither选项

    from PIL import Image
    im = Image.open("E:mywife.jpg")
    new_im = im.convert('P')
    print(new_im.mode)
    new_im.show()
    

    size类

    图像的尺寸,按照像素数计算,它的返回值为宽度和高度的二元组(width, height)。

    from PIL import Image
    im = Image.open("E:mywife.jpg")
    print(im.size) ## 打印出尺寸信息
    im.show()
    

    Thumbnail类

    对图像长宽进行操作

    from PIL import Image
    im = Image.open("E:mywife.jpg")
    w, h = im.size
    print('Original image size: %sx%s' % (w, h))
    im.thumbnail((w//2, h//2))
    im.save('thumbnail.jpg', 'jpeg')
    

    Palette类

    颜色调色板表格。如果图像的模式是“P”,则返回ImagePalette类的实例;否则,将为None。
    如下为对非“P”模式下的图像进行palette信息显示。

    from PIL import Image
    im = Image.open("E:mywife.jpg")
    print(im.palette)
    

    New类

    使用给定的变量mode和size生成新的图像。Size是给定的宽/高二元组,这是按照像素数来计算的。对于单通道图像,变量color只给定一个值;对于多通道图像,变量color给定一个元组(每个通道对应一个值)。在版本1.1.4及其之后,用户也可以用颜色的名称,比如给变量color赋值为“red”。如果没有对变量color赋值,图像内容将会被全部赋值为0(为黑色)。如果变量color是空,图像将不会被初始化,即图像的内容全为0。这对向该图像复制或绘制某些内容是有用的。

    如下为将图像设置为128x128大小的红色图像。

    from PIL import Image
    im = Image.open("E:mywife.jpg")
    n_im= Image.new("RGB", (128, 128), "#FF0000")
    n_im.show()
    

    Copy

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

    from PIL import Image
    im = Image.open("E:mywife.jpg")
    im_copy = im.copy()
    

    Crop类

    从当前的图像中返回一个矩形区域的拷贝。变量box是一个四元组,定义了左、上、右和下的像素坐标。用来表示在原始图像中截取的位置坐标,如box(100,100,200,200)就表示在原始图像中以左上角为坐标原点,截取一个100*100(像素为单位)的图像,为方便理解,如下为示意图box(b1,a1,b2,a2)。作图软件为Visio2016。这是一个懒操作。对源图像的改变可能或者可能不体现在裁减下来的图像中。为了获取一个分离的拷贝,对裁剪的拷贝调用方法load()。

    from PIL import Image
    im = Image.open("E:mywife.jpg")
    box = (300, 100, 700, 700)              ##确定拷贝区域大小
    region = im.crop(box)                   ##将im表示的图片对象拷贝到region中,大小为box
    region.show()
    
    

    Paste类

    将一张图粘贴到另一张图像上。变量box或者是一个给定左上角的2元组,或者是定义了左,上,右和下像素坐标的4元组,或者为空(与(0,0)一样)。如果给定4元组,被粘贴的图像的尺寸必须与区域尺寸一样。如果模式不匹配,被粘贴的图像将被转换为当前图像的模式。

    from PIL import Image
    im = Image.open("E:mywife.jpg")
    box=[0,0,100,100]
    im_crop = im.crop(box)
    print(im_crop.size,im_crop.mode)
    im.paste(im_crop, (100,100))             ##(100,100,0,0)
    im.paste(im_crop, (400,400,500,500))
    im.show()
    

    Draft

    配置图像文件加载器,使得返回一个与给定的模式和尺寸尽可能匹配的图像的版本。

    from PIL import Image
    im = Image.open("E:mywife.jpg")
    print(im.size,im.mode)
    new_im = im.draft("L", (200,200))
    print(new_im.size,new_im.mode)
    new_im.show()
    

    Rotate类

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

    from PIL import Image
    im = Image.open("E:mywife.jpg")
    im_45 = im.rotate(45)
    im_30 = im.rotate(30, Image.NEAREST,1)
    print(im_45.size,im_30.size)
    im_45.show()
    im_30.show()
    
  • 相关阅读:
    SpringBoot
    SpringBoot
    MySQL
    Database
    Database
    MySQL
    Debug
    《mysql必知必会》学习_第18章
    C#中访问私有成员
    精彩语录收集
  • 原文地址:https://www.cnblogs.com/gongcheng-/p/11084876.html
Copyright © 2011-2022 走看看