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

news2025/4/2 8:45:16

一、PIL库简介

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

二、安装PIL库

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

pip install pillow

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

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))

示例代码

​
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)

示例代码

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")

示例代码

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)

示例代码

​
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)

示例代码

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))

示例代码

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)

示例代码

​
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库的基本使用方法,并能将其应用到实际的图像处理项目中。资源绑定附上完整资源供读者参考学习。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2323688.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python项目整体文件和依赖打包

python项目整体文件和依赖打包 python项目整体文件和依赖打包 python项目整体文件和依赖打包 准备工作:扫描项目中必要的依赖包 pip install pipreqs pipreqs . 会有一些警告包,需要pip list进行版本修正,这里是三个包第一步:在虚拟环境中安…

logstash收集数据

防止ES的的I/O的压力过大,使用redis/kafka进行缓冲。 对redis的要求 Redis input plugin | Logstash Reference [8.17] | Elastic 一般企业要求的架构 我实现的架构 filebeat把数据传给logstash 配置好filebeat把收集到的数据输入到redis 然后执行命令&#xff0…

智能运维时代的网络拓扑管理:乐维监控的架构可视化实践

在数字化转型的浪潮中,企业IT基础设施正经历着前所未有的复杂化进程。当数以千计的网络设备、服务器、存储系统构成庞大网络体系时,如何实现全局可视化管理已成为企业数字化转型的关键命题。乐维监控网络拓扑系统作为新一代智能运维平台的核心组件&#…

CentOS 7 安装 EMQX (MQTT)

CentOS 7 安装 EMQX 通过 Yum 源安装 EMQX 支持通过 Yum 源安装,您可通过以下 Yum 命令从中自动下载和安装 EMQX。 通过以下命令配置 EMQX Yum 源: curl -s https://assets.emqx.com/scripts/install-emqx-rpm.sh | sudo bash安装以下依赖项&#xff…

人工智能:officeAI软件,如何调整AI对话界面的字体?

1、首先,随便打开一个excel(使用wps) 依次点击上方的【OfficeAI】—【右侧面板】 2、在弹出的面板中,输入:助手设置 , 然后按【回车】发送出去 3、之后会弹出界面,在【样式设定】中&#xff…

Qt之共享内存类QSharedMemory的使用及实现原理(全)

目录 1.简介 2.使用 3.实现原理 3.1.Windows内存映射 3.2.POSIX 共享内存 3.3.System V 共享内存 3.4.QSharedMemory的实现原理 4.总结 1.简介 QSharedMemory 是 Qt 框架提供的一个类,用于在不同进程或线程之间实现共享内存的管理。借助共享内存&#xff0c…

Problem A: 接口使用

1.题目问题 2.样例 3.代码实现 补充:注意空格 // 定义Vehicle接口 interface Vehicle {void start();void stop(); }// 实现Vehicle接口的Bike类 class Bike implements Vehicle {Overridepublic void start() {System.out.println("i am bike,i am running&…

用Python插入Excel表格到Word文档

在日常办公场景中,通过Python脚本自动化整合Excel数据与Word文档,能够实现表格的智能迁移,满足不同场景下数据呈现的专业性要求。直接提取表格内容插入Word适用于需要快速传递核心数据的场景,确保信息精准直达;完整复制…

合合信息TextIn大模型加速器 2.0来了:智能文档解析和图表解析能力全面升级

合合信息“TextIn大模型加速器 2.0”版本来了:文档解析和图表解析能力全面升级 背景 在日常工作中,我们常常遇到无法直接复制的文档内容或图片内容,这些内容通常需要进行识别和解析。一个典型的例子是,当我们需要将折线图转化为…

消息队列Message Queue

前面,我们在黑点点评中秒杀场景中,首次了解到消息队列MQ,它主要解决了秒杀场景中异步场景,提升了并发性,吞吐量。可是还是对消息队列又很多的疑惑? 消息队列是什么 消息队列是一种通信协议或中间件&#…

如何利用AI智能生成PPT提升工作效率

如何利用AI智能生成PPT提升工作效率?PPT制作曾经是每个人办公生活中的一大痛点。你有多久没有在制作PPT时感到焦头烂额,选模板、调整格式、插入图片,每一项都得花费大量的时间和精力,最后还未必能做出一份令人满意的效果。随着人工…

WIN11 企业版 部署Dify+Docker

Dify(Do it for you)是一款开源的大语言模型应用开发平台,旨在简化AI应用的创建、部署和管理过程,使开发者能够更快速、更轻松地构建和运营基于GPT等模型的AI应用。 Dify平台创建和运营一个AI chatbot应用,涉及到登录…

1.25-20GHz/500ns超快跳频!盛铂SWFA300国产捷变频频率综合器模块赋能雷达/5G/电子战高频精密控制 本振/频综模块

盛铂SWFA300捷变频频率综合器模块简述: 盛铂科技国产SWFA300捷变频频率综合器是一款在频率范围内任意两点频率的跳频时间在500nS以内的高速跳频源,其输出频率范围为1.25GHz至20GHz,频率的最小步进为10kHz。同时它拥有优秀的相位噪声特性&…

代理IP协议详解HTTP、HTTPS、SOCKS5分别适用于哪些场景

“代理IP协议在现代网络通信中扮演着至关重要的角色。它们通过提供中间层服务,帮助用户匿名访问网络、绕过地理限制、提高安全性和加速数据传输。HTTP、HTTPS和SOCKS5是三种最常见的代理IP协议,每种协议都有其特定的用途和适用场景。” HTTP代理及其适用…

AIGC工具平台-通用抠图换背景

本模块采用先进的大模型智能算法,精准识别并分割图像中的人物或物品主体,实现高效、精准、智能化的抠图处理。无论是人物肖像、产品展示,还是复杂场景,该工具均能准确提取主体,并自动适配至背景图像,实现自…

word快速创建虚拟文字

创建虚拟文字的作用:如培训新员工使用 Word,用虚拟文字演示如何设置段落格式。不需要你随便乱敲文字或者去复制一段文字过来。帮你节约了时间! 两个函数的使用必须在段落的开头!!! rand函数 在 Word 中…

win10下python脚本运行缺失ccache的问题处理

问题 python脚本运行时,会提醒参考 https://github.com/ccache/ccache/blob/master/doc/INSTALL.md 处理缺失ccache的问题。 下载编译 下载ccache主干版本, 例如 https://github.com/ccache/ccache/archive/refs/heads/master.zip 按照说明编译 mkd…

开发复合组件TLabel + TwwDBLookupCombo

老鸟跳过。。。。。。。。本文只是为小白准备的 -------------- TwwDBLookupCombo 组件是老牌控件包的 Inofpower 中的一个组件。Inofpower 很久也没有更新了,只是作了新版DELPHI的适配,组件的功能从D2007那些开始到现在,可以说几乎没有任何…

0328-内存图2

是否正确待定: Perso类 package com.qc.内存图2;public class Perso {public int age;public String name;public static int flag;public void m1() {}public static void m2() {}Overridepublic String toString() {return "Perso [age" age "…

【ESP32S3】esp32获取串口数据并通过http上传到前端

通过前面的学习(前面没发过,因为其实就是跑它的demo)了解到串口配置以及开启线程实现功能的工作流程,与此同时还有esp32作为STA节点,将数据通过http发送到服务器。 将这两者联合 其实是可以得到一个:esp32获…