• 【python】PIL库学习总结


    PIL库的使用

    PIL(Python Image Library)库是Python语言的第三方库,需要通过pip工具安装。

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

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

    图像归档:对图像进行批处理、生成图像预览、图像格式转换等;

    图像处理:图像基本处理、像素处理、颜色处理等。

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

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

    >>>from PIL import Image

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

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

    Image.format   标识图像格式或来源,如果图像不是从文件读取,值是None

    Image.mode     图像的色彩模式,"L"灰度图像、"RGB"真彩色图像、"CMYK"出版图像

    Image.size        图像宽度和高度,单位是像素(px),返回值是二元元组(tuple)

    Image.palette    调色板属性,返回一个ImagePalette类型

    Lmage类处理方法

    Image.save(filename, format)     将图像保存为filename文件名,format是图片格式

    Image.convert(mode)  使用不同的参数,转换图像为新的模式

    Image.thumbnail(size) 创建图像的缩略图,size是缩略图尺寸的二元元组

    Image.resize(size) 按size大小调整图像,生成副本

    Image.rotate(angle)     按angle角度旋转图像,生成副本

    Image.point(func) 根据函数func功能对每个元素进行运算,返回图像副本

    Image.split()  提取RGB图像的每个颜色通道,返回图像副本

    Image.merge(mode,bands)     合并通道 ,采用mode色彩,bands是新色的色彩通道

    Image.blend(im1,im2,alpha)  将两幅图片im1和im2按照如下公式插值后生成新的图像:

    im1 * (1.0-alpha) + im2 * alpha

    微实例7.1: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("处理结束")

    微实例7.2:图像的颜色交换。

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

        

    1 from PIL import Image
    2 
    3     im = Image.open('birdnest.jpg')
    4 
    5     r, g, b = im.split()
    6 
    7 om = Image.merge("RGB", (b, g, r))
    8 
    9 om.save('birdnestBGR.jpg')

    操作图像的每个像素点需要通过函数实现,采用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') #输出图片

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

    ImageFilter.BLUR  图像的模糊效果

    ImageFilter.CONTOUR 图像的轮廓效果

    ImageFilter.DETAIL       图像的细节效果

    ImageFilter.EDGE_ENHANCE      图像的边界加强效果

    ImageFilter.EDGE_ENHANCE_MORE  图像的阈值边界加强效果

    ImageFilter.EMBOSS    图像的浮雕效果

    ImageFilter.FIND_EDGES     图像的边界效果

    ImageFilter.SMOOTH   图像的平滑效果

    ImageFilter.SMOOTH_MORE      图像的阈值平滑效果

    ImageFilter.SHARPEN  图像的锐化效果

    微实例7.3:图像的轮廓获取。

    from PIL import Image

    from PIL import ImageFilter

    im = Image.open('birdnest.jpg')

    om = im.filter(ImageFilter.CONTOUR)

    om.save('birdnestContour.jpg')

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

    ImageEnhance.enhance(factor)  对选择属性的数值增强factor倍

    ImageEnhance.Color(im)     调整图像的颜色平衡

    ImageEnhance.Contrast(im) 调整图像的对比度

    ImageEnhance.Brightness(im)    调整图像的亮度

    ImageEnhance.Sharpness(im)     调整图像的锐度

    微实例7.4:图像的对比度增强。

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

    1 from PIL import Image
    2 
    3 from PIL import ImageEnhance
    4 
    5 im = Image.open('birdnest.jpg')
    6 
    7 om = ImageEnhance.Contrast(im)
    8 
    9 om.enhance(20).save('birdnestEnContrast.jpg')

    图像字符画绘制

    位图图片是由不同颜色像素点组成的规则分布,如果采用字符串代替像素,图像就成为了字符画。

    定义一个字符集,将这个字符集替代图像中的像素点。

    定义彩色向灰度的转换公式如下,其中R、G、B分别是像素点的RGB颜色值:

     

    Gray = R * 0.2126 + G * 0.7152 + B * 0.0722

     

  • 相关阅读:
    第三周作业
    第二周作业
    实时控制软件大作业总结
    实时控制软件大作业四
    实时控制软件大作业三
    实时控制软件大作业二
    轨迹插补程序
    实时控制软件大作业博客一
    实时控制软件设计第四周作业
    实时控制软件设计第三周作业-1
  • 原文地址:https://www.cnblogs.com/litchi666/p/12747770.html
Copyright © 2020-2023  润新知