python3-PIL图像实战2

发布时间:2021-07-29 22:43:01编辑:run阅读(3364)

    使用PIL进行图片处理,PIL提供了许多图像处理的函数,使用点变换来更改像素值对图像实现几何变换


    PIL模块安装

    pip install pillow


    镜像图像,可以使用transpose()函数得到水平或垂直方向上的镜像图像

    from PIL import Image
    
    im = Image.open(r'D:\image_processing\jpgs\cc.jpg')
    im.transpose(Image.FLIP_LEFT_RIGHT).show()

    原图:

    image.png

    镜像图

    image.png

    可以看到左右位置改变了。



    旋转图像,可以使用rotate()函数将图像旋转一个角度(以度为单位)

    from PIL import Image
    
    im = Image.open(r'D:\image_processing\jpgs\cc.jpg')
    im_45 = im.rotate(45)
    im_45.show()

    image.png



    在图像上应用仿射变换。二维仿射变换矩阵T可以应用于图像的每一个像素,以进行仿射变换,这种变换通常通过反向映射(扭曲)来实现。

    transform()函数中的数据参数是一个六元组(a,b,c,d,e,f),其中包含仿射变换矩阵的前两行。对于输出图像中的每个像素(x,y),新值取自输入图像中的位置(ax+by+c,dx+ey+f),使用最接近的像素进行近似。transform()函数可用于缩放,平移,旋转和裁剪原始图像。

    from PIL import Image
    
    im = Image.open(r'D:\image_processing\jpgs\cc.jpg')
    im.transform((int(1.4*im.width),im.height), Image.AFFINE, data=(1,-0.5,0,0,1,0)).show()

    image.png



    透视变换,通过使用Image.PERSPECTIVE参数,可以使用transform()函数对图像进行透视变换。

    from PIL import Image
    
    im = Image.open(r'D:\image_processing\jpgs\cc.jpg')
    
    params = [1, 0.1, 0, -0.5, 1.5, 0, -0.005, -0.001]
    im1 = im.transform((im.width//2, im.height), Image.PERSPECTIVE, params, Image.BICUBIC)
    im1.show()

    image.png



    更改图像的像素值,可以使用putpixel()函数更改图像中的像素值,可以通过从图像中随机选择几个像素值,然后将这些像素值的一半设置为黑色,另一半设置为白色,来为图像添加一些椒盐噪声。

    from PIL import Image
    import numpy as np
    
    im = Image.open(r'D:\image_processing\jpgs\cc.jpg')
    im1 = im.copy()
    n = 5000
    x, y = np.random.randint(0, im.width, n), np.random.randint(0, im.height, n)
    for (x, y) in zip(x, y):
        im1.putpixel((x, y), ((0, 0, 0) if np.random.rand() < 0.5 else (255, 255, 255)))
    im1.show()

    输出噪声图像

    image.png



    在图像上绘制图形,可以用PIL.ImageDraw模块中的函数在图像上绘制线条或者其它几何图形,ellipse()函数可用于绘制椭圆

    from PIL import Image, ImageFont, ImageDraw
    
    im = Image.open(r'D:\image_processing\jpgs\cc.jpg')
    draw = ImageDraw.Draw(im)
    draw.ellipse((125, 125, 200, 150), fill=(255,255,255,128))
    del draw
    im.show()

    image.png



    在图像上添加文本,可以使用PIL.ImageDraw模块中的text()函数向图像添加文本.

    from PIL import Image, ImageFont, ImageDraw
    
    im = Image.open(r'D:\image_processing\jpgs\cc.jpg')
    draw = ImageDraw.Draw(im)
    font = ImageFont.truetype("simsun.ttc", 23)
    draw.text((10, 5), "Python3-PIL图像处理实战", 'red', font=font)
    del draw
    im.show()

    image.png

关键字