Python笔记八:PIL库的使用

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

1.  图像归档(Image Archives)。PIL非常适合于图像归档以及图像的批处理任务。你可以使用PIL创建缩略图,转换图像格式,打印图像等等。
2.  图像展示(Image Display)。PIL较新的版本支持包括Tk PhotoImage,BitmapImage还有Windows DIB等接口。PIL支持众多的GUI框架接口,可以用于图像展示。
3.  图像处理(Image Processing)。PIL包括了基础的图像处理函数,包括3.对点的处理,使用众多的卷积核(convolution kernels)做过滤(filter),还有颜色空间的转换。PIL库同样支持图像的大小转换,图像旋转,以及任意的仿射变换。PIL还有一些直方图的方法,允许你展示图像的一些统计特性。这个可以用来实现图像的自动对比度增强,还有全局的统计分析等。

一、安装PIL库

我使用的是pip3.9,其目录为F:\Program Files (x86)\Microsoft Visual Studio\Shared\Python39_64\Scripts,在DOS命令下,先转入安装目录下执行pip,安装PIL(pillow)

Python笔记八:PIL库的使用_第1张图片

 二、图像处理

原图(tiger.jpg)

Python笔记八:PIL库的使用_第2张图片

1.图像轮廓获取

from PIL import Image
from PIL import ImageFilter
im = Image.open("a.jpg")
im1 = Image.open("tiger.jpg")
om = im1.filter(ImageFilter.EDGE_ENHANCE)
om = im1.filter(ImageFilter.SMOOTH)
om = im1.filter(ImageFilter.CONTOUR)
om.save("tigerContur.jpg")

Python笔记八:PIL库的使用_第3张图片

 2.颜色交换

r——>g,g——>b,b——>r

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

Python笔记八:PIL库的使用_第4张图片

 3.缩略图

from PIL import Image
im = Image.open("tiger.jpg")
im.thumbnail((128,128))
im.save("tigerTN","JPEG")

 

4.对每个像素点进行操作

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

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

将R通道颜色值改为原来的0.9倍,选择B通道值低于100的像素点,合并3个通道的值

im = Image.open("tiger.jpg")
r,g,b = im.split()
newr = r.point(lambda i: i*0.9)
newb = b.point(lambda i: i<100)
om = Image.merge(im.mode,(newr,g,newb))
om.save("tigermerge.jpg")

Python笔记八:PIL库的使用_第5张图片

 三、图像的字符画绘制

十二星座(astro.jpg)

Python笔记八:PIL库的使用_第6张图片

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

gray = int(0.2126*r +0.7152*g +0.0722*b)

灰度值0——255,黑色为0,白色为255

# 图像的字符画绘制
from turtle import width
from PIL import Image
ascii_char = list("****#ofkgjdifrfifrkabcdefghiklkjqigrudvwijvjk;*#(^*&#$^@(@:~")

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]
def main():
    im =Image.open('astro.jpg')
    WIDTH,HEIGHT = 600,100
    im = im.resize((WIDTH,HEIGHT))
    txt = ''
    for i in range(HEIGHT):
        for j in range(WIDTH):
            txt += get_char(*im.getpixel((j,i)))
        txt +='\n'
    fo = open("pic_char.txt","w")
    fo.write(txt)
    fo.close()
main()

执行后,打开其所在文件,如下图

Python笔记八:PIL库的使用_第7张图片

你可能感兴趣的:(Python学习笔记,python,开发语言,visual,studio)