当前位置: 首页 > article >正文

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

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

相关文章:

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

一、PIL库简介 PIL(Python Imaging Library)是一个功能强大的图像处理库,它提供了丰富的图像处理功能,包括图像的打开、处理和保存等操作。PIL支持多种图像文件格式,如JPEG、PNG、BMP等,并且可以完成对图像…...

深入解析缓冲区:计算机世界的“蓄水池”与“加速器”

引言 想象这样一个场景: 你的手机正在播放4K视频,同时下载大型文件 视频画面流畅无卡顿,下载速度稳定在满带宽 但手机的内存只有8GB,下载文件的大小却超过20GB 这看似矛盾的现象背后,缓冲区(Buffer&am…...

Elasticsearch 之 ElasticsearchRestTemplate 聚合查询

前言: 上一篇我们分享了 ElasticsearchRestTemplate 的常用普通查询,本篇我们使用 ElasticsearchRestTemplate 来完成 Elasticsearch 更为复杂的聚合查询。 Elasticsearch 系列文章传送门 Elasticsearch 基础篇【ES】 Elasticsearch Windows 环境安装…...

基础认证-单选题(一)

单选题 1、下列关于request方法和requestlnStream方法说法错误的是(C) A 都支持取消订阅响应事件 B 都支持订阅HTTP响应头事件 C 都支持HttpResponse返回值类型 D 都支持传入URL地址和相关配置项 2、如需修改Text组件文本的透明度可通过以下哪个属性方法进行修改 (C) A dec…...

DeepSeek算法研发闭环解析:如何打造持续进化的AI生产线?

摘要:在AI模型快速迭代的今天,如何构建一个高效、自优化的算法研发体系?DeepSeek通过独特的"数据-训练-评估-部署"闭环架构,实现了AI模型的持续进化。本文将深入剖析其核心设计逻辑与工程实现细节,揭秘支撑千…...

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

spring batch 中JpaNamedQueryProvider、JpaNativeQueryProvider两种查询方式对比

完整代码示例:对比两种查询方式 // Employee.java 实体类(包含命名查询) Entity NamedQuery(name "Employee.findAllNamedQuery", query "SELECT e FROM Employee e ORDER BY e.id") // 定义命名查询 public class Em…...

Spring项目中使用EasyExcel实现Excel 多 Sheet 导入导出功能(完整版)

Excel 多 Sheet 导入导出功能完整实现指南 一、环境依赖 1. Maven 依赖 <!-- EasyExcel --> <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.3.2</version> </dependency>…...

OkHttp的拦截器是如何工作的?

OkHttp 的拦截器是其核心特性之一,它允许开发者在请求和响应的处理过程中插入自定义逻辑。下面为你详细介绍 OkHttp 拦截器的工作原理、分类及执行流程。 拦截器工作原理概述 OkHttp 中的拦截器本质上是实现了Interceptor接口的类。该接口定义了一个intercept方法,在这个方…...

CentOS 7 安装 EMQX (MQTT)

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

重试机制之指针退避策略算法

一、目的&#xff1a;随着重试次数增加&#xff0c;逐步延长重连等待时间&#xff0c;避免加重服务器负担。 二、计算公式&#xff1a; 每次重试的延迟时间 初始间隔 (退避基数 ^ 重试次数) 通常设置上限防止等待时间过长。 const delay Math.min(initialDelay * Math.pow…...

spring security的过滤器链

Spring Security 的安全功能通过一系列过滤器&#xff08;Filter&#xff09;组成的链式结构实现&#xff0c;每个过滤器负责处理特定的安全任务。这些过滤器按特定顺序执行&#xff0c;形成过滤器链&#xff08;Security Filter Chain&#xff09;。以下是其核心过滤器及工作原…...

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

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

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

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

dockerfile构建镜像方式

在 Docker 中&#xff0c;可使用 docker build 命令依据 Dockerfile 构建镜像。下面为你详细介绍构建镜像的具体方式。 基本构建命令 若要构建镜像&#xff0c;需在包含 Dockerfile 的目录下执行 docker build 命令。基本语法如下&#xff1a; bash docker build -t <镜像…...

Problem A: 接口使用

1.题目问题 2.样例 3.代码实现 补充&#xff1a;注意空格 // 定义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文档

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

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

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

笔记:代码随想录算法训练营day62:108.冗余连接、109.冗余连接II

学习资料&#xff1a;代码随想录 108. 冗余连接 卡码网题目链接&#xff08;ACM模式&#xff09; 判断是否有环的依据为&#xff0c;利用并查集&#xff0c;isSame函数&#xff0c;判断当下这条边的两个节点入集前是否为同根&#xff0c;如果是的话&#xff0c;该边就是会构…...

刚刚整理实测可用的股票数据API接口集合推荐:同花顺、雅虎API、智兔数服、聚合数据等Python量化分析各项数据全面丰富

在金融科技高速发展的今天&#xff0c;股票API接口已成为开发者、量化交易者和金融从业者的核心工具之一。它通过标准化的数据接口&#xff0c;帮助用户快速获取实时或历史市场数据&#xff0c;为投资决策、策略回测和金融应用开发提供支持。本文将深入解析股票API的核心功能、…...

消息队列Message Queue

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

Day 25:股票的最大利润 + 1到n求和

数组 prices 记录了某芯片近期的交易价格&#xff0c;其中 prices[i] 表示的 i 天该芯片的价格。你只能选择 某一天 买入芯片&#xff0c;并选择在 未来的某一个不同的日子 卖出该芯片。请设计一个算法计算并返回你从这笔交易中能获取的最大利润。 如果你不能获取任何利润&…...

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

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

WIN11 企业版 部署Dify+Docker

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

理解CMakeLists.txt文件

CMakeLists.txt(主入口) │ ├── 项目元信息(project, cmake_minimum_required) ├── 编译选项设置(option) ├── 编译标志设置(set(CMAKE_...)) ├── 查找依赖库(find_package, include_directories) ├── 注册插件、扩展(register_extension, add_subdi…...

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

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

MySql修改全部表和字段编码

修改全部表 SELECT CONCAT(ALTER TABLE , TABLE_NAME, CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;) AS sql_statements FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA 数据库名称 返回的下面这种SQL,然后批量执行即可 ALTER TABLE gen_table CO…...

elementUI el-image图片加载失败解决

是不是&#xff0c;在网上找了一些&#xff0c;都不行&#xff0c;这里一行代码&#xff0c;解决&#xff0c;后端返回图片路径&#xff0c;el-image图片加载失败的问题 解决办法&#xff0c; vue项目里&#xff0c;index.html文件里加一行代码就可 <meta name"refe…...