首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >第十一章:Python PIL库-图像处理

第十一章:Python PIL库-图像处理

作者头像
啊阿狸不会拉杆
发布2026-01-21 10:12:56
发布2026-01-21 10:12:56
1820
举报

一、PIL库简介

PIL(Python Imaging Library)是一个功能强大的图像处理库,它提供了丰富的图像处理功能,包括图像的打开、处理和保存等操作。PIL支持多种图像文件格式,如JPEG、PNG、BMP等,并且可以完成对图像的缩放、剪裁、叠加以及向图像添加线条、图像和文字等操作。虽然原始的PIL库已经不再维护,但现在我们使用的是其分支Pillow,它在Python3中仍然可以正常使用。资源绑定附上完整资源供读者参考学习。

二、安装PIL库

安装Pillow非常简单,可以通过pip命令进行安装:

代码语言:javascript
复制
pip install pillow

安装完成后,可以通过以下代码导入Pillow库:

代码语言:javascript
复制
from PIL import Image

三、PIL库常用模块及用法详解

1. Image模块

Image模块是Pillow库中最为重要的模块,它提供了用于创建、处理和编辑图像的类和方法。

常用方法

方法名

作用

示例

open()

打开图像文件,返回一个Image对象

image = Image.open('example.jpg')

show()

显示图像

image.show()

save()

保存图像到磁盘

image.save('edited_example.jpg')

resize()

调整图像大小

resized_image = image.resize((800, 600))

rotate()

旋转图像

rotated_image = image.rotate(90)

crop()

裁剪图像

cropped_image = image.crop((100, 100, 400, 400))

point()

对图像的每个像素应用一个函数,以改变其亮度等属性

brighter_img = img.point(lambda p: p * 1.5)

split()

将图像分割成多个区域

tiles = img.split((rows, cols))

paste()

将一个图像粘贴到另一个图像上

background.paste(foreground, (0, 0))

示例代码
代码语言:javascript
复制
​
from PIL import Image

# 打开图像
image = Image.open('example.jpg')

# 显示图像
image.show()

# 调整图像大小
resized_image = image.resize((800, 600))
resized_image.show()

# 旋转图像
rotated_image = image.rotate(90)
rotated_image.show()

# 裁剪图像
cropped_image = image.crop((100, 100, 400, 400))
cropped_image.show()

# 调整图像亮度
brighter_img = image.point(lambda p: p * 1.5)
brighter_img.show()

# 保存图像
resized_image.save('resized_example.jpg')

​
效果展示:

2. ImageFilter模块

ImageFilter模块提供了用于图像滤镜效果的类和方法,可以为图像添加各种滤镜效果。

常用滤镜

滤镜名

作用

示例

BLUR

模糊效果

blurred_img = img.filter(ImageFilter.BLUR)

SHARPEN

锐化效果

sharpened_img = img.filter(ImageFilter.SHARPEN)

EMBOSS

浮雕效果

embossed_img = img.filter(ImageFilter.EMBOSS)

FIND_EDGES

边缘检测

edge_detected_img = img.filter(ImageFilter.FIND_EDGES)

示例代码
代码语言:javascript
复制
from PIL import Image, ImageFilter

# 打开图像
img = Image.open('演示图片3.jpg')

# 应用模糊滤镜
blurred_img = img.filter(ImageFilter.BLUR)
blurred_img.show()

# 应用锐化滤镜
sharpened_img = img.filter(ImageFilter.SHARPEN)
sharpened_img.show()

# 应用浮雕滤镜
embossed_img = img.filter(ImageFilter.EMBOSS)
embossed_img.show()

# 应用边缘检测滤镜
edge_detected_img = img.filter(ImageFilter.FIND_EDGES)
edge_detected_img.show()
效果展示:

3. ImageEnhance模块

ImageEnhance模块提供了用于图像效果增强的类和方法,可以修改图像的对比度、亮度、色彩平衡度和锐度等属性。

常用增强效果

增强效果

作用

示例

Contrast

修改图像对比度

enh = ImageEnhance.Contrast(im); enh.enhance(1.3).show("30% more contrast")

Brightness

修改图像亮度

enh = ImageEnhance.Brightness(im); enh.enhance(1.5).show("50% more brightness")

Color

修改图像色彩平衡度

enh = ImageEnhance.Color(im); enh.enhance(0.7).show("30% less color")

Sharpness

修改图像锐度

enh = ImageEnhance.Sharpness(im); enh.enhance(2.0).show("Double sharpness")

示例代码
代码语言:javascript
复制
from PIL import Image, ImageEnhance

# 打开图像
im = Image.open('演示图片4.jpg')

# 修改对比度
enh = ImageEnhance.Contrast(im)
enhanced_img = enh.enhance(1.3)
enhanced_img.show("30% more contrast")

# 修改亮度
enh = ImageEnhance.Brightness(im)
enhanced_img = enh.enhance(1.5)
enhanced_img.show("50% more brightness")

# 修改色彩平衡度
enh = ImageEnhance.Color(im)
enhanced_img = enh.enhance(0.7)
enhanced_img.show("30% less color")

# 修改锐度
enh = ImageEnhance.Sharpness(im)
enhanced_img = enh.enhance(2.0)
enhanced_img.show("Double sharpness")
效果展示:

4. ImageDraw模块

ImageDraw模块提供了用于在图像上绘制图形和文本的类和方法。

常用绘制方法

方法名

作用

示例

rectangle()

绘制矩形

draw.rectangle([(50, 50), (150, 150)], outline="red", width=5)

text()

绘制文本

draw.text((50, 200), "Hello, PIL!", fill="blue", font=font)

line()

绘制线条

draw.line([(100, 200), (300, 400)], fill="green", width=3)

ellipse()

绘制椭圆

draw.ellipse([(200, 100), (300, 200)], outline="purple", width=2)

示例代码
代码语言:javascript
复制
​
from PIL import Image, ImageDraw, ImageFont

# 打开图像
image = Image.open('example.jpg')

# 创建绘制对象
draw = ImageDraw.Draw(image)

# 绘制矩形
draw.rectangle([(50, 50), (150, 150)], outline="red", width=5)

# 加载字体
font = ImageFont.truetype("arial.ttf", 40)

# 绘制文本
draw.text((50, 200), "Hello, PIL!", fill="blue", font=font)

# 绘制线条
draw.line([(100, 200), (300, 400)], fill="green", width=3)

# 绘制椭圆
draw.ellipse([(200, 100), (300, 200)], outline="purple", width=2)

# 显示绘制后的图像
image.show()

​
效果展示:

5. ImageFont模块

ImageFont模块提供了用于加载和使用字体的类和方法,可以在图像上绘制文本时指定字体样式和大小。

常用方法

方法名

作用

示例

truetype()

加载TrueType字体文件

font = ImageFont.truetype("arial.ttf", 40)

6. ImageStat模块

ImageStat模块提供了用于图像统计分析的类和方法,可以计算图像的直方图、均值、方差等统计信息。

常用方法

方法名

作用

示例

Stat()

计算图像的统计信息

stats = ImageStat.Stat(img)

extrema

获取图像的最小值和最大值

print("亮度范围:", stats.extrema)

count

获取图像的像素总数

print("像素总数:", stats.count)

sum

获取图像像素值的总和

print("像素总和:", stats.sum)

mean

获取图像像素值的均值

print("像素均值:", stats.mean)

median

获取图像像素值的中位数

print("像素中位数:", stats.median)

rms

获取图像像素值的均方根

print("像素均方根:", stats.rms)

var

获取图像像素值的方差

print("像素方差:", stats.var)

stddev

获取图像像素值的标准差

print("像素标准差:", stats.stddev)

示例代码
代码语言:javascript
复制
from PIL import Image, ImageStat

# 打开图像
img = Image.open('演示图片5.jpg')

# 计算图像的统计信息
stats = ImageStat.Stat(img)

# 获取图像的最小值和最大值
print("亮度范围:", stats.extrema)

# 获取图像的像素总数
print("像素总数:", stats.count)

# 获取图像像素值的总和
print("像素总和:", stats.sum)

# 获取图像像素值的均值
print("像素均值:", stats.mean)

# 获取图像像素值的中位数
print("像素中位数:", stats.median)

# 获取图像像素值的均方根
print("像素均方根:", stats.rms)

# 获取图像像素值的方差
print("像素方差:", stats.var)

# 获取图像像素值的标准差
print("像素标准差:", stats.stddev)
效果展示:

7. 图像的几何变换

常用方法

方法名

作用

示例

transpose()

实现图像的垂直、水平翻转

flipped_img = img.transpose(Image.FLIP_LEFT_RIGHT)

rotate()

旋转图像任意角度

rotated_img = img.rotate(45)

transform()

对图像进行变换操作

transformed_img = img.transform((200, 200), Image.AFFINE, (1, 0, 0, 0, 1, 0))

示例代码
代码语言:javascript
复制
from PIL import Image

# 打开图像
img = Image.open('演示图片6.jpg')

# 水平翻转图像
flipped_img = img.transpose(Image.FLIP_LEFT_RIGHT)
flipped_img.show()

# 旋转图像45度
rotated_img = img.rotate(45)
rotated_img.show()

# 对图像进行仿射变换
transformed_img = img.transform((200, 200), Image.AFFINE, (1, 0, 0, 0, 1, 0))
transformed_img.show()
效果展示:

8. 图像的分离与合并

常用方法

方法名

作用

示例

split()

将图像分离成其各个颜色通道

r, g, b = img.split()

merge()

合并多个颜色通道成一个图像

merged_img = Image.merge("RGB", (r, g, b))

blend()

将两幅图片按照透明度混合

blended_img = Image.blend(img1, img2, alpha=0.5)

示例代码
代码语言:javascript
复制
​
from PIL import Image

# 打开图像
img = Image.open('example.jpg')

# 分离图像的颜色通道
r, g, b = img.split()

# 合并颜色通道
merged_img = Image.merge("RGB", (r, g, b))
merged_img.show()

# 打开另一张图像并调整大小
img2 = Image.open('example2.jpg').resize(img.size)

# 混合两张图像
blended_img = Image.blend(img, img2, alpha=0.5)
blended_img.show()

​
效果展示:

四、总结

    通过以上内容,我们详细介绍了Python中PIL库(Pillow)的使用方法,包括Image模块、ImageFilter模块、ImageEnhance模块、ImageDraw模块、ImageFont模块和ImageStat模块等的常用功能和用法。希望本篇教程能帮助你掌握PIL库的基本使用方法,并能将其应用到实际的图像处理项目中。资源绑定附上完整资源供读者参考学习。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2026-01-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、PIL库简介
  • 二、安装PIL库
  • 三、PIL库常用模块及用法详解
    • 1. Image模块
      • 常用方法
      • 示例代码
      • 效果展示:
    • 2. ImageFilter模块
      • 常用滤镜
      • 示例代码
      • 效果展示:
    • 3. ImageEnhance模块
      • 常用增强效果
      • 示例代码
      • 效果展示:
    • 4. ImageDraw模块
      • 常用绘制方法
      • 示例代码
      • 效果展示:
    • 5. ImageFont模块
      • 常用方法
    • 6. ImageStat模块
      • 常用方法
      • 示例代码
      • 效果展示:
    • 7. 图像的几何变换
      • 常用方法
      • 示例代码
      • 效果展示:
    • 8. 图像的分离与合并
      • 常用方法
      • 示例代码
      • 效果展示:
  • 四、总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档