zoukankan      html  css  js  c++  java
  • PIL库

    PIL库概述:

    PIL是Python的第三方库,PIL库支持图像存储、显示和处理,它能够处理几乎所有图片格式,可以完成对图像的缩放、剪裁、叠加以及向图像添加线条、图像和文字等操作。

    PIL库可以完成图像归档和图像处理两方面功能需求:

    图像归档:对图像进行批处理、生成图像预览、图像格式转换等;
    图像处理:图像基本处理、像素处理、颜色处理等。

    PIL库Image类解析:

    1、在PIL中,任何一个图像文件都可以用Image对象表示Image类的图像读取和创建方法。

     2、要加载一个图像文件,最简单的形式如下,之后所有操作对im起作用

    >>>from PIL import Image
    >>>im = Image.open("D:\pycodes\birdnest.jpg")

     3、Image类有4个处理图片的常用属性

    4、GIF文件图像提取方法如下:

    对一个GIF格式动态文件,提取其中各帧图像,并保存为文件。

    from PIL import Image
    im = Image.open('pybit.gif')      # 读入一个GIF文件
    try:
        im.save('picframe{:02d}.png'.format(im.tell()))
        while True:
            im.seek(im.tell()+1)
            im.save('picframe{:02d}.png'.format(im.tell()))
    except:
        print("处理结束")

    5、Image类的图像转换和保存方法如表所示。

    6、生成"birdnest.jpg"图像的缩略图,其中(128,128)是缩略图的尺寸。

    >>>im.thumbnail((128, 128))
    >>>im.save("birdnestTN","JPEG")

    7、Image类可以缩放和旋转图像,其中,rotate()方法以逆时针旋转的角度值作为参数来旋转图像。

     8、Image类能够对每个像素点或者一幅RGB图像的每个通道单独进行操作,split()方法能够将RGB图像各颜色通道提取出来,merge()方法能够将各独立通道再合成一幅新的图像。

     

     9、图像的颜色交换的方法:

    交换图像中的颜色。可以通过分离RGB图片的三个颜色通道实现颜色交换

    from PIL import Image
    im = Image.open('birdnest.jpg')
    r, g, b = im.split()
    om = Image.merge("RGB", (b, g, r))
    om.save('birdnestBGR.jpg')

    10、操作图像的每个像素点需要通过函数实现,采用lambda函数和point()方法搭配使用,例子如下:

    >>>im = Image.open('D:\pycodes\birdnest.jpg') #打开鸟巢文件
    >>>r, g, b = im.split() #获得RGB通道数据
    >>>newg = g.point(lambda i: i * 0.9) # 将G通道颜色值变为原来的0.9倍
    >>>newb = b.point(lambda i: i < 100) # 选择B通道值低于100的像素点
    >>>om = Image.merge(im.mode, (r, newg, newb)) # 将3个通道合形成新图像
    >>>om.save('D:\pycodes\birdnestMerge.jpg') #输出图片

    图像的过滤和增强:

    1、PIL库的ImageFilter类和ImageEnhance类提供了过滤图像和增强图像的方法,共10种

     2、图像的轮廓获取的方法:

    from PIL import Image
    from PIL import ImageFilter
    im = Image.open('birdnest.jpg')
    om = im.filter(ImageFilter.CONTOUR)
    om.save('birdnestContour.jpg')

     3、ImageEnhance类提供了更高级的图像增强需求,它提供调整色彩度、亮度、对比度、锐化等功能。

     4、图像的对比度增强的方法:

    增强图像的对比度为初始的20倍。

    from PIL import Image
    from PIL import ImageEnhance
    im = Image.open('birdnest.jpg')
    om = ImageEnhance.Contrast(im)
    om.enhance(20).save('birdnestEnContrast.jpg')

     图像字符画绘制

    1、位图图片是由不同颜色像素点组成的规则分布,如果采用字符串代替像素,图像就成为了字符画。
    定义一个字符集,将这个字符集替代图像中的像素点。

    ascii_char =list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjf
    1234568795t/|()1{}[]?-_+~<>i!;:,"^`'.")

     2、定义彩色向灰度的转换公式如下,其中R、G、B分别是像素点的RGB颜色值:
    Gray = R * 0.2126 + G * 0.7152 + B * 0.0722
    因此,像素的RGB颜色值与字符集的对应函数如下:

    def get_char(r, b, g, alpha=256):
    if alpha == 0:
        return ' '
    gray = int(0.2126 * r + 0.7152 * g + 0.0722 * b)    unit = 256 / len(ascii_char)
        return ascii_char[gray//unit]
  • 相关阅读:
    WIN API下的窗口创建
    SharePoint阻止字段更新后引发相关事件
    hdu 3018 Ant Trip 求欧拉路径
    状态压缩dp与树形dp
    位运算符
    电影播放器mplayer设置常用选项
    poj 2249Binomial Showdown
    poj 3370 Halloween treats
    MPlayer配置文件
    MPlayerLinux 媒体播放器的安装与使用
  • 原文地址:https://www.cnblogs.com/jiana/p/12748612.html
Copyright © 2011-2022 走看看