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

Python Imaging Library (PIL) 全面指南:PIL基础入门-图像合成与处理技巧

图像合成

学习目标

通过本课程的学习,学员将掌握如何使用Python Imaging Library (PIL)进行图像的合成,包括如何处理图像的透明度以及如何叠加图像以创建复杂的视觉效果。本课程将通过理论讲解与实践操作相结合的方式,帮助学员从零开始构建图像处理技能。

相关知识点

  • 图像合成

学习内容

1 图像合成

1.1 PIL库的基本使用

Python Imaging Library (PIL) 是一个强大的图像处理库,它允许开发者轻松地处理图像数据。PIL提供了广泛的文件格式支持,以及高效的内部表示和强大的图像处理能力。在Python 3中,PIL的维护和发展已经转移到了Pillow项目,因此在安装时通常会安装Pillow库。

安装Pillow

在开始之前,确保环境中已经安装了Pillow库。可以通过以下命令安装:

%pip install pillow

加载图像

加载图像是使用PIL进行图像处理的第一步。使用Image.open()方法可以打开一个图像文件。例如,假设我们有一个名为example.jpg的图像文件,可以使用以下代码加载它:
下载数据

!wget https://model-community-picture.obs.cn-north-4.myhuaweicloud.com/ascend-zone/notebook_datasets/824d9b802a4d11f080f1fa163edcddae/image.zip
#解压缩
!unzip image.zip
from PIL import Image# 加载图像
img = Image.open('example.jpg')
# 显示图像
img.show()

在这里插入图片描述

保存图像

处理完图像后,通常需要将结果保存到文件中。使用Image.save()方法可以将图像保存到指定的文件路径。例如,将处理后的图像保存为output.jpg

# 保存图像
img.save('output.jp
1.2 图像的透明度处理

在图像合成中,处理图像的透明度是非常重要的一步。PIL中的图像对象支持Alpha通道,这使得我们可以控制图像的透明度。Alpha通道的值范围从0(完全透明)到255(完全不透明)。

创建带有Alpha通道的图像

要创建一个带有Alpha通道的图像,可以使用Image.new()方法,并指定模式为RGBA。例如,创建一个100x100像素的透明图像:

# 创建一个100x100像素的透明图像
img = Image.new('RGBA', (100, 100), (0, 0, 0, 0))
img.show()

在这里插入图片描述

修改图像的透明度

可以通过修改图像的Alpha通道来改变图像的透明度。例如,将图像的透明度设置为50%:

# 加载图像
img = Image.open('example.jpg').convert('RGBA')# 获取图像数据
data = img.getdata()# 修改Alpha通道
new_data = []
for item in data:# 将Alpha通道设置为128(50%透明度)new_data.append((item[0], item[1], item[2], 128))# 更新图像数据
img.putdata(new_data)
img.show()

在这里插入图片描述

1.3 图像的叠加与合成

图像的叠加与合成本质上是将多张图像合并成一张。PIL提供了多种方法来实现这一点,包括使用Image.paste()方法和Image.alpha_composite()方法。

使用Image.paste()方法

Image.paste()方法可以将一个图像粘贴到另一个图像的指定位置。如果源图像包含Alpha通道,那么粘贴时会自动处理透明度。例如,将一个带有Alpha通道的图像粘贴到另一个图像上:

# 加载背景图像
background = Image.open('background.jpg')# 加载带有Alpha通道的前景图像
foreground = Image.open('foreground.png').convert('RGBA')# 将前景图像粘贴到背景图像上
background.paste(foreground, (50, 50), foreground)
background.show()

在这里插入图片描述

使用Image.alpha_composite()方法

Image.alpha_composite()方法用于将两个带有Alpha通道的图像进行合成。这种方法适用于需要精确控制透明度的情况。例如,将两个带有Alpha通道的图像进行合成:

from PIL import Image# 加载两个带有Alpha通道的图像
img1 = Image.open('image1.png').convert('RGBA')
img2 = Image.open('image2.png').convert('RGBA')# 调整 img1 的透明度,adjustment_factor小于1降低透明度,大于1增加透明度
adjustment_factor = 0.7 # 直接在Alpha通道上应用调整因子,并确保值在0到255之间
r, g, b, alpha = img1.split()
new_alpha = alpha.point(lambda p: min(125, int(p * adjustment_factor)))
img2.putalpha(new_alpha)# 合成图像
result = Image.alpha_composite(img1, img2)
result.show()

在这里插入图片描述

http://www.dtcms.com/a/356816.html

相关文章:

  • 基于 Python asyncio 和币安 WebSocket 打造高频加密货币预警机器人
  • TypeScript: Reflect.ownKeys 操作(针对 Symbol)
  • Lenovo C225 一体机拆机维修教程
  • 2025牛客暑期多校训练营4 G Ghost in the Parentheses 题解记录
  • LoRA三种不同训练流程在配置和保存权重的差异(64)
  • 《Shell 大道:筑基篇(下)—— 流控筑根基,数据任驱驰》
  • shell学习笔记-实战:创建、运行与变量操作
  • Python Imaging Library (PIL) 全面指南:PIL基础入门-构建简易图像编辑器
  • matlab利用模糊算法控制PID参数实现模糊控制
  • LabVIEW实现跨 VI 簇按钮控制功能
  • 2026届大数据毕业设计选题推荐-基于Python的出行路线规划与推荐系统 爬虫数据可视化分析
  • 如何为在线医疗问诊小程序实现音视频通话功能?
  • Spring Boot整合MyBatis Plus实现多维度数据权限控制
  • Day17_【机器学习—在线数据集 鸢尾花案例】
  • Java面试实战:Spring Boot微服务在电商场景的技术深度解析
  • Scikit-learn Python机器学习 - Scikit-learn介绍
  • Dify1.8.0更新,Docker 无法拉取镜像怎么破?
  • 【大模型13】 视觉大模型与多模态
  • 部署2.516.2版本的jenkins,同时适配jdk8
  • 【ACP】2025-最新-疑难题解析-9
  • 技术速递|新手指南:如何在 Foundry Local 中使用自定义模型
  • 趣味学Rust基础篇(控制流程)
  • 关于Libvio访问异常排查指南
  • 2025互联网大厂Java面试1000道题目及参考答案
  • openEuler系统实现MySQL数据库主从复制
  • Java 流(Stream)、文件(File)和IO
  • NSSCTF-[NISACTF 2022]string_WP
  • 第6.4节:awk语言 for 语句
  • Linux 软件编程(十四)网络编程:数据存储与 SQLite 数据库
  • (二)Python语法基础(下)