zoukankan      html  css  js  c++  java
  • 美白,磨皮,搞笑图片处理

    一、PIL库概述

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

    1、功能:

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

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

    2、分类:

    Ⅰ、Image类:from PIL import Image

    (1)图像读取和创建方法

    方法 描述

    Image.open(filename)

    根据参数加载图像文件

    Image.new(mode, size, color)

    根据给定参数创建一个新的图像

    Image.open(StringIO.StringIO(buffer))

    字符串中获取图像

    例:

    from PIL import Image
    im = Image.open("D:\我爱学习\python3\photos\image1.jpg")
    

      

    (2)处理图片常用属性:

    方法 描述
    Image.format

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

    Image.mode

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

    Image.size

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

    Image.palette

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

    (3)图像转换和保存方法:

    方法 描述
    Image.save(filename,format) 将图像保存为filename文件名,format是文件格式
    Image.convert(mode) 使用不同的参数,转换图像为新的模式
    Image.thumbnail(size) 创建图像的缩略图,size是缩略尺寸的二元元组

     例:

    from PIL import Image
    im = Image.open("D:\我爱学习\python3\photos\image1.jpg")
    im.thumbnail((128,128))
    im.save("D:\我爱学习\python3\photos\imagechange1.jpg")
    

      效果对比图如下:

    (4)像素点和RGB:

    方法 描述
    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

    例:

    from PIL import Image
    im = Image.open("D:\我爱学习\python3\photos\image1.jpg")
    r,g,b = im.split()
    om = Image.merge("RGB",(b,g,r))
    om.save("D:\我爱学习\python3\photos\imagechange2.jpg")
    

      效果对比如下:

     Ⅱ、ImageFilter类:from PIL import ImageFilter

    方法 描述

    ImageFilter.BLUR

    图像的模糊效果

    ImageFilter.CONTOUR

    图像的轮廓效果

    ImageFilter.DETAIL

    图像的细节效果

    ImageFilter.EMBOSS

    图像的浮雕效果

    ImageFilter.SMOOTH

    图像的平滑效果

    ImageFilter.SHARPEN

    图像的锐化效果

    Ⅲ、ImageEnhance类:from PIL import ImageEnhance

    方法 描述

    ImageEnhance.enhance(factor)

    对选择属性的数值增强factor倍

    ImageEnhance.Color(im)

    调整图像的颜色平衡

    ImageEnhance.Contrast(im)

    调整图像的对比度

    ImageEnhance.Brightness(im)

    调整图像的亮度

    ImageEnhance.Sharpness(im)

    调整图像的锐度

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

     二、实例展现

    1、以下图为例,进行缩略,变色,提取轮廓和浮雕:

    (原图 image6.jpg)

    from PIL import Image
    from PIL import ImageFilter
    im = Image.open("D:\我爱学习\python3\photos\image6.jpg")
    
    r,g,b = im.split()     #变色
    newr = b.point(lambda i: i * 0.7)
    bm = Image.merge("RGB",(b,g,r))
    bm.save("D:\我爱学习\python3\photos\imageaa2.jpg")
    
    cm = im.filter(ImageFilter.CONTOUR)    #轮廓
    cm.save("D:\我爱学习\python3\photos\imageaa3.jpg")
    
    dm = im.filter(ImageFilter.EMBOSS)    #浮雕
    dm.save("D:\我爱学习\python3\photos\imageaa4.jpg")
    
    im.thumbnail((120,120))    #缩略
    im.save("D:\我爱学习\python3\photos\imageaa1.jpg")
    

    效果比较如下:

    (顺序依次为:原图,缩略,变色,轮廓,浮雕)

    2、以下图为例,进行gif图提取:

    注:

    (1)f.seek()函数:用于移动文件读取指针到文件指定的位置

    (2)f.tell ()函数:返回当前文件指针在文件中的位置

    (原gif    tianxianbabe.gif)

    from PIL import Image
    im = Image.open('D:\我爱学习\python3\photos\tianxianbabe.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("处理结束")
    

      得到图片62张。以下为随机抽取出来的图片。

    3、以下图为例,进行图片锐度,磨皮和美白:

     

    (原图    Image.jpg )

    拓展:

    import cv2  源自  opencv库,可用镜像网站下载安装包,再到cmd窗口下载:https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple/opencv-python

    我下载的是:opencv_python-3.4.9.33-cp36-cp36m-win_amd64.whl 下载路径是 D:

    安装时执行命令为:pip install “绝对路径”+whl文件名  e.g, pip install D:opencv_python-3.4.9.33-cp36-cp36m-win_amd64.whl 

    函数 描述
    cv2.imread(filepath,flags) 读入图像,filepath:要读入图片的完整路径,flags:读入图片的标志 
    cv2.imshow(wname,img)  显示图像,wname:显示图像的窗口的名字,img:要显示的图像(即读入的图像)
    cv2.waitKey() 等待键盘输入,参数为0时,表示无限等待
    cv2.imwrite(file,img,num) 保存图像,file:要保存的文件名,img:要保存的图像,num:可选,针对特定格式

    cv2.flip(img,flipcode)

    翻转图像,flipcode = 0:沿x轴翻转, > 0:沿y轴翻转,< 0:x,y轴同时翻转
    img.copy() 复制图像
    cv2.destroyAllWindow() 销毁所有窗口

     np.uint8()表示无符号整数(从0 到255)

    numpy.clip(a, a_min, a_max, out=None)中a是一维数组,a_min表示a中最小值, a_max表示a中最大值。

    from PIL import Image
    from PIL import ImageEnhance
    import cv2
    import numpy as np
    def Sharpen(sharpness):
        im = Image.open(filename)
        om = ImageEnhance.Sharpness(im)
        im_sharpen = om.enhance(sharpness)
        im_sharpen.save('D:\我爱学习\python3\photos\sharpen.jpg')
    def Whiten(image,whi):
        import cv2
        image = cv2.imread(filename)
        white = np.uint8(np.clip((whi * image) + 10, 0, 255))
        cv2.imshow('Her',white)
        cv2.waitKey(0)
        cv2.destroyAllWindows()
        cv2.imwrite('Hermione','Her')
    
    if __name__ =="__main__":
        filename = 'D:\我爱学习\python3\photos\Image.jpg'
    
        sharpness=30
        Sharpen(sharpness)
    
        whi = 1.2
        image = cv2.imread('D:\我爱学习\python3\photos\Image.jpg')
        Whiten(image,whi)
    

      效果如下:

    (从左至右依次为:原图,锐化,美白)

    4、生成gif:

    import PIL.Image as Image
    def get_gif(pics_dir,n,t=300):
        imgs = []
        for i in range(n):
            pic_name = '{}/{}.jpg'.format(pics_dir,i)
            temp = Image.open(pic_name)
            imgs.append(temp)
        save_name = '{}.gif'.format(pics_dir)
        imgs[0].save(save_name, save_all=True, append_images=imgs, duration=t)
        return save_name
    if __name__ == '__main__':
        pics_dir = 'D:\我爱学习\python3\photos\crazy2'
        save_name = get_gif(pics_dir,32,300)
        print('制作完成。所属文件:{}'.format(save_name))
    

    效果如下:

     

     

  • 相关阅读:
    转载的log4cplus使用指南
    linux下安装log4cplus
    MongoDB常用命令
    ios UIButton改背景
    ios发送邮件
    oracle数据库 in 结果字段的拆分
    Server returned HTTP response code: 505
    ORA-01795:列表中的最大表达式数为1000
    ajax post请求
    oracle 同义词
  • 原文地址:https://www.cnblogs.com/deng11/p/12657278.html
Copyright © 2011-2022 走看看