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

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

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

相关文章

【编译、链接与构建详解】Makefile 与 CMakeLists 的作用

【编译、链接与构建详解】Makefile 与 CMakeLists 的作用 前言源代码(.c、.cpp)编译编译的本质编辑的结果编译器(GCC、G、NVCC 等) 目标文件(.o)什么是 .o 目标文件为什么单个 .o 目标文件不能直接执行&…

Ubuntu / Debian 创建快捷方式启动提权

简述 在 Linux 系统中,.desktop 文件是 桌面入口文件,用于在桌面环境(如 GNOME、KDE)中定义应用程序的启动方式、图标、名称等信息。当你执行 touch idea.desktop 时,实际上创建了一个空的 .desktop 文件(…

ISIS报文

IS-IS 报文 目录 IS-IS 报文 一、报文类型与功能 二、报文结构解析 三、核心功能特性 四、典型应用场景 五、抓包数据分析 六、总结 IS-IS(中间系统到中间系统)协议报文是用于链路状态路由协议中网络设备间交换路由信息的关键载体,其设…

beikeshop多商户跨境电商独立站最新版v1.6.0版本源码

一.介绍 beikeshop跨境电商独立站最新版V1.6.0源码 多商户 多商家 多语言 多币结算 本博主亲测搭建代码全开源质量相对来说很稳定的 二.服务器环境 系统:CentOS、 环境:PHP7.4 Nginx 1.21 MySQL 5.6 常见插件:fileinfo ; re…

Redis批量操作详解

一、原生批量命令(MSET) 适用场景:所有键的过期时间相同或无过期设置,且无需条件判断。 方法: 将多个SET命令合并为MSET命令,但需要注意MSET的局限性(无法设置过期时间,且所有键值对…

Spring Boot 集成实战:AI 工具如何自动生成完整微服务模块

在数字化转型的浪潮中,开发效率和质量是企业竞争力的关键要素。飞算 JavaAI 作为一款创新的 AI 工具,能在 Spring Boot 开发中,自动生成完整微服务模块,极大提升开发效率。下面,我们就详细介绍如何借助飞算 JavaAI&…

算法 | 2024最新算法:斑翠鸟优化算法原理,公式,应用,算法改进研究综述,matlab代码

基于斑翠鸟优化算法的原理、应用及改进研究综述 一、算法原理 斑翠鸟优化算法(Pied Kingfisher Optimizer, PKO)是2024年由Bouaouda等人提出的一种新型仿生智能优化算法,其灵感来源于斑翠鸟的捕食行为与共生关系。算法通过模拟斑翠鸟的栖息悬停、潜水捕鱼及与其他生物的共生…

RabbitMQ高级特性--重试特性

目录 1.重试配置 2.配置交换机&队列 3.发送消息 4.消费消息 5. 运行程序观察结果 6. 手动确认 注意: 在消息传递过程中, 可能会遇到各种问题, 如网络故障, 服务不可用, 资源不足等, 这些问题可能导致消息处理失败. 为了解决这些问题, RabbitMQ 提供了重试机制, …

Vue 组件通信 - 中央事件总线

Vue 渐进式JavaScript 框架 基于Vue2的学习笔记 - Vue组件通信 - 中央事件总线 目录 中央事件总线 图示 准备工作 设置页面元素 创建组件 总结 中央事件总线 使用vue的监听和触发来实现中央事件总线方式。 on监听 emit触发,组件按钮绑定点击事件&#xff0c…

5.0 WPF的基础介绍1-Grid,Stack,button

WPF: Window Presentation Foundation. WPF与WinForms的对比如下: 特性WinFormsWPF技术基础基于传统的GDI(图形设备接口)基于DirectX,支持硬件加速的矢量渲染UI设计方式拖拽控件事件驱动代码(简单但局限)…

QT软件设计可考虑回答

在Qt应用中是否引入抽象类需要根据具体场景权衡&#xff0c;以下是分层建议&#xff1a; 建议采用抽象类的3个典型场景&#xff1a; 传感器系统抽象&#xff08;强推荐&#xff09; class AbstractSensor { public:virtual ~AbstractSensor() default;virtual QVector<L…

pytorch学习(b站小土堆学习)

1 环境配置 参考链接 2. dir 和 help函数 dir()&#xff1a;用于查看某一模块函数的方法 help()&#xff1a; 用于查看某方法的使用方法 3. dataset类实战 利用Image对象打开图片&#xff0c;利用os模块的地址拼接组成图片路径 当我们用方括号访问元素对象时&#xff0c;…

Unity TextMeshPro 实现文本逐字淡出效果

Unity TextMeshPro 实现文本逐字淡出效果 前言项目思路场景布置代码编写 前言 在处理角色对话时经常会用到一些文本动画&#xff0c;正好记录一下。使用 TextMeshPro&#xff0c;我们可以直接操作文本的顶点数据&#xff0c;实现诸如渐变、动画等效果&#xff0c;为游戏界面和…

Mathtype无法插入到Word中

在word工具栏上有没有出现Mtahtype&#xff0c;会出现以下两种情况&#xff1a; 1. 没有出现Mtahtype 2. 出现Mtahtype&#xff0c;但是点击会出现弹窗 “ Couldnt find the MathPage.wll ” 解决方案 首先查看word版本是32位还是64位&#xff0c;这个位数是office安装位数…

责任链模式_行为型_GOF23

责任链模式 责任链模式&#xff08;Chain of Responsibility Pattern&#xff09;是一种行为型设计模式&#xff0c;核心思想是将多个处理请求的对象连成一条链&#xff0c;请求沿链传递直到被处理。它像现实中的“多级审批流程”——请假或报销时&#xff0c;申请会逐级提交给…

Qt图形化界面为何总被“冷落“?

在Qt开发者的IDE中&#xff0c;Qt Designer总像一个被遗忘的角落——即便它有着直观的拖拽式界面设计功能。通过分析GitHub上超过5000个Qt项目发现&#xff0c;仅有17%的项目使用.ui文件构建界面。这个数据背后&#xff0c;隐藏着开发者群体对GUI构建方式的集体选择。我们不禁要…

SQL Server从安装到入门一文掌握应用能力。

本篇文章主要讲解,SQL Server的安装教程及入门使用的基础知识,通过本篇文章你可以快速掌握SQL Server的建库、建表、增加、查询、删除、修改等基本数据库操作能力。 作者:任聪聪 日期:2025年3月31日 一、SQL Server 介绍: SQL Server 是微软旗下的一款主流且优质的数据库…

简单视图函数

视图函数 文章目录 视图函数[toc]一、什么是视图函数二、简单视图函数三、返回错误视图 一、什么是视图函数 所谓视图函数&#xff08;简称视图&#xff09;&#xff0c;本质上就是一个Python函数&#xff0c;用于接收Web请求并且返回Web响应。Web响应可以包含很多类型&#x…

QT文件操作(QT实操学习3)

1.项目架构 1.UI界面 1.新建文本文档 2.打开文件 3.另存为文件 2.mainwindow.h​ #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #include <QFileDialog> #include <QMessageBox> #include <QDebug> QT_BEGIN_NAMESPACE namespa…

HX324双运算放大器:赋能万物互联时代的信号处理基石

一、运算放大器行业的技术演进与市场需求 在全球半导体市场规模突破6000亿美元的背景下&#xff0c;模拟芯片作为电子系统的"感官神经"&#xff0c;正迎来智能化升级浪潮。据IC Insights数据显示&#xff0c;2023年全球运算放大器市场规模达32.7亿美元&#xff0c;其…