Python 图像处理 PIL 第三方库详细使用教程(更新中)

Pillow 库 基本概述

Python Pillow PIL 库的用法介绍,Pillow库是一个Python的第三方库。

要点:PIL库是一个具有强大图像处理能力的第三方库,不仅包含了丰富的像素、色彩操作功能,还可以用于图像归档和批量处理。

官方文档路径:https://pillow.readthedocs.io/en/latest/

在 Python2 中,PIL (Python Imaging Library) 是一个非常好用的图像处理库,但 PIL 不支持 Python3,所以 Alex Clark 和 Contributors 提供了 Pillow,使其可以在 Python3 中使用。

PIL(Python Image Library)库是 Python 语言的第三方库,需要通过pip工具安装。安装PIL库的方法如下,需要注意,安装库的名字是 pillow。

pip 安装 Pillow 库

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

PIL库主要可以实现图像归档和图像处理两方面动能需求:

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

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

pip install pillow

PIL库 Image 类解析

Image是PIL最重要的类,它代表一张图片,引入这个类的方法如下:

from PIL import Image

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

通过 Image 打开图像文件时,图像的栅格数据不会被直接解码或者加载,程序只是读取了图像文件头部的元数据信息,这部分信息标识了图像的格式、颜色、大小等。因此,打开一个文件会十分迅速,与图像的存储和压缩方式无关。

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

from PIL import Image
im = Image.open ("a.jpg")

在使用IDLE交互方式处理图片文件时,建议采用文件的全路径;如果使用Python文件形式,建议采用相对路径,将文件和程序放到一个目录中。

Image 类有 4 个处理图片的常用属性,如表所示 (共4个)


查看已经读取的图像文件的属性如下:

>>>print (im. format, im.size, im.mode)
JPEG (900, 598) RGB

创建白底的图片:def new(mode, size, color=0)

image = Image.new('RGB', (600, 600), (255, 255, 255))

Image 转换和保存

Image类的图像转换和保存方法 (共3个) 如表所示。

其中,save()方法有两个参数:文件名 filename 和图像格式 format。如果调用时不指定保存格式,PIL将自动根据文件名filename后缀存储图像;如果指定格式,则按照格式存储。

搭配采用 open() 和 save() 方法可以实现图像的格式转换,例如,将 jpg 格式转换为 png 格式代码如下。需要注意,Image 类的 save() 方法主要用于保存文件到硬盘,PIL 库还提供了功能更强大的格式转换方法。

im = Image.open("a.jpg")
im.save("a.png")

Image 缩放和旋转

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

Image类的图像旋转和缩放方法(共2个):

Image 像素通道处理

Image类能够对每个像素点或者一幅RGB图像的每个通道单独进行操作。split()方法能够将RGB 图像各颜色通道提取出来;

merge()方法能够将各独立通道再合成一幅新的图像。

lmage类的图像像素和通道处理方法(共4个):

图像的颜色交换,交换图像中的颜色,通过分离RGB图片的3个颜色通道实现颜色交换。

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

Image 图像融合案例

首先选取背景图:

选取需要被融合的图片:

from PIL import Image

background = Image.open('background.jpg')
problem = Image.open('problem.jpg')

problem = problem.resize((int(problem.size[0] / problem.size[1] * 220), 220))
width, height = problem.size
for i in range(0, width):
    for j in range(0, height):
        if problem.getpixel((i, j)) != (255, 255, 255):
            background.putpixel((i + 40, j + 40), (43, 33, 110))

background.show()
background.save("background_image.jpg")

效果预览图展示:

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
社会演员多的头像社会演员多普通用户
上一篇 2023年5月23日
下一篇 2023年5月23日

相关推荐