Python 课程22-Pillow

news2024/10/2 18:59:21

前言

Pillow 是一个 Python 图像处理库,是 Python Imaging Library (PIL) 的升级版。Pillow 提供了对常见图像文件格式(如 PNG、JPEG、GIF 等)的支持,并允许你进行图像裁剪、调整大小、旋转、滤镜应用、文本添加等操作。Pillow 广泛用于 Web 应用、机器学习中的图像预处理和图像批处理等场景。

本教程将展示如何使用 Pillow 处理图像文件,涵盖从基础图像操作到高级图像处理技巧。你将学会如何加载图像、编辑图像、保存处理后的图像,并应用不同的图像滤镜和效果。


目录

  1. Pillow 基础

    • 安装 Pillow
    • 加载与显示图像
    • 保存图像
    • 获取图像信息
  2. 基本图像操作

    • 调整图像大小与缩放
    • 图像旋转与翻转
    • 图像裁剪
    • 调整图像颜色(亮度、对比度)
  3. 高级图像处理

    • 应用滤镜与效果
    • 处理透明度与 Alpha 通道
    • 合并图像与图像叠加
    • 添加文字到图像
  4. 图像格式转换与批处理

    • 图像格式转换
    • 图像批处理与自动化

1. Pillow 基础

安装 Pillow

你可以通过 pip 安装 Pillow:

pip install Pillow

加载与显示图像

使用 Pillow 加载并显示图像。Image.open() 函数用于打开图像,show() 函数可以显示图像。

from PIL import Image

# 加载图像
image = Image.open('example.jpg')

# 显示图像
image.show()

保存图像

使用 save() 方法可以将图像保存为不同的格式。

# 保存图像为 PNG 格式
image.save('output.png')
获取图像信息

你可以通过 size 属性获取图像的宽度和高度,format 属性查看图像的文件格式。

# 获取图像尺寸
width, height = image.size
print(f"Image Size: {width}x{height}")

# 获取图像格式
print(f"Image Format: {image.format}")

2. 基本图像操作

调整图像大小与缩放

你可以使用 resize() 方法来调整图像的大小。可以通过设置图像的新宽高来缩放图像。

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

 此外,还可以使用 thumbnail() 方法缩略图,保持原图比例。

# 创建缩略图
image.thumbnail((150, 150))
image.show()

图像旋转与翻转

Pillow 提供了旋转图像和翻转图像的功能。

  • 旋转图像
# 旋转 90 度
rotated_image = image.rotate(90)
rotated_image.show()
  •  翻转图像
# 水平翻转
flipped_image = image.transpose(Image.FLIP_LEFT_RIGHT)
flipped_image.show()

图像裁剪

你可以使用 crop() 方法裁剪图像,传入一个 4 元素的元组 (left, upper, right, lower) 定义裁剪区域。

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

调整图像颜色(亮度、对比度)

Pillow 提供了 ImageEnhance 模块来调整图像的亮度、对比度、颜色和锐度。

from PIL import ImageEnhance

# 调整图像亮度
enhancer = ImageEnhance.Brightness(image)
brightened_image = enhancer.enhance(1.5)  # 增强亮度
brightened_image.show()

# 调整图像对比度
contrast_enhancer = ImageEnhance.Contrast(image)
contrasted_image = contrast_enhancer.enhance(2.0)  # 增强对比度
contrasted_image.show()

3. 高级图像处理

应用滤镜与效果

Pillow 提供了丰富的图像滤镜,可以通过 ImageFilter 模块应用滤镜效果。

from PIL import ImageFilter

# 应用模糊滤镜
blurred_image = image.filter(ImageFilter.BLUR)
blurred_image.show()

# 应用锐化滤镜
sharpened_image = image.filter(ImageFilter.SHARPEN)
sharpened_image.show()

 处理透明度与 Alpha 通道

对于带有透明通道的图像(如 PNG 格式),你可以直接操作其透明度。

  • 设置透明度
image = image.convert("RGBA")  # 转换为带 Alpha 通道的图像
pixels = image.getdata()

# 修改每个像素的 Alpha 值
new_pixels = [(r, g, b, int(a * 0.5)) for (r, g, b, a) in pixels]
image.putdata(new_pixels)
image.show()

 合并图像与图像叠加

你可以通过 paste() 方法将一张图像叠加到另一张图像上。

background = Image.open('background.jpg')
overlay = Image.open('overlay.png')

# 叠加 overlay 图像到背景图像的 (50, 50) 位置
background.paste(overlay, (50, 50), overlay)  # 第三个参数是 alpha 通道
background.show()

添加文字到图像

你可以使用 ImageDraw 模块在图像上添加文本。

from PIL import ImageDraw, ImageFont

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

# 选择字体(需要指定字体路径)
font = ImageFont.truetype("arial.ttf", 40)

# 在图像上添加文字
draw.text((50, 50), "Hello, Pillow!", fill="white", font=font)
image.show()

4. 图像格式转换与批处理

图像格式转换

你可以轻松地将图像从一种格式转换为另一种格式。

# 将 JPG 图像转换为 PNG
image = Image.open('example.jpg')
image.save('output.png')

图像批处理与自动化

Pillow 可以轻松实现批处理操作,例如调整一组图像的大小、转换格式等。

import os
from PIL import Image

input_folder = "images/"
output_folder = "output_images/"

# 批量调整大小并保存为 PNG 格式
for filename in os.listdir(input_folder):
    if filename.endswith(".jpg"):
        img = Image.open(os.path.join(input_folder, filename))
        img = img.resize((800, 800))
        img.save(os.path.join(output_folder, filename.replace(".jpg", ".png")))

结论

通过本教程,你已经学习了如何使用 Pillow 处理图像文件。Pillow 提供了丰富的功能,可以帮助你高效地进行图像处理操作,从基本的图像加载、显示、保存,到高级的图像滤镜应用、透明度处理和文本叠加等功能。Pillow 是许多 Python 图像处理项目中不可或缺的工具,广泛应用于 Web 应用、机器学习中的图像预处理以及图像批处理等场景。

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

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

相关文章

Applio:颠覆语音克隆的AI黑科技!

Applio:颠覆语音克隆的AI黑科技! Applio是一个神奇的AI语音克隆工具✨,提供超过20,000种声音模型🎤,让你轻松创造独特音色🎶!开源社区欢迎所有人参与,共同探索AI音频的无限可能&…

蓝桥杯备赛---2.新建工程

推荐根据视频进行工程建立 开发板资源简介&工程模板建立_哔哩哔哩_bilibili 目录 推荐根据视频进行工程建立 1.点击"File"下的"New Project"新建一个工程 ​编辑 2. 查看官方给的数据手册,选择对于的单片机型号 3. 查看原理图&#…

银河麒麟操作系统中设置进程堆栈大小的方法

银河麒麟操作系统中设置进程堆栈大小的方法 1、临时修改堆栈大小步骤一:查看当前堆栈大小步骤二:修改堆栈大小 2、永久修改堆栈大小步骤一:查看当前堆栈大小(可选)步骤二:编辑配置文件步骤三:注…

论文精读--Two-Stream Convolutional Networks for Action Recognition in Videos

对于单张图片,丢进卷积和全连接层直接得出分类结果就行 但对于视频,早期的一些工作把视频中的一些关键帧抽取出来,把一个个帧通过网络,最后把结果合并,或者把帧叠起来,一起丢进网络。在网络中进行early fu…

【C++】模拟实现红黑树

🦄个人主页:修修修也 🎏所属专栏:实战项目集 ⚙️操作环境:Visual Studio 2022 目录 一.了解项目功能 二.逐步实现项目功能模块及其逻辑详解 📌实现RBTreeNode类模板 🎏构造RBTreeNode类成员变量 🎏实现RBTreeNode类构…

【数据结构】堆(Heap)详解----定义堆、初始化,删除、插入、销毁、判空、取堆顶

文章目录 一、堆的概念及其性质:堆的概念:堆的性质: 二、堆的定义及其基础操作的代码实现(C语言版)1.定义堆2.堆的初始化3.堆的销毁4.堆的插入5.堆的删除6.取堆顶的数据7.堆的数据个数8.堆的判空 总结: 提示…

Python开发环境配置(mac M2)

1. 前言 作为一名程序员,工作中需要使用Python进行编程,甚至因为项目需要还得是不同版本的Python如何手动管理多个版本的Python,如何给Pycharm(IDE)配置对应的interpreter等,都成为一个 “不熟练工” 的难…

【面向对象】设计模式概念和分类

零.前提提要 本文章是我考中级软件设计师时的笔记,基本都是一些自己的思路和见解,现记录一下,希望可以帮助到即将考证的同学。 一.面向对象设计模式的概念 二.面向对象的设计模式分类 设计模式确定了所包含的类和实例、他们的角色和写作方式以…

AMBER学习记录--使用Multiwfn计算有机小分子的RESP电荷--问题及解决

1 ORCAMultiwfn在wsl中的安装 ORCA的安装参考量子化学程序ORCA的安装方法 - 思想家公社的门口:量子化学分子模拟二次元 (sobereva.com) Multiwfn的安装 参考保姆级安装Linux版Multiwfn教程_multiwfn安装过程-CSDN博客 2 计算C3G的RESP电荷 2.1从pubchem上下载C3G的…

77. 组合【含回溯详解、N叉树类比、剪枝优化】

文章目录 77. 组合思路暴力法回溯与N叉树类比回溯法三部曲 总结剪枝优化剪枝总结 77. 组合 77. 组合 给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 示例 1: 输入:n 4, k 2 输出&am…

spring loCDI 详解

文章目录 一、IoC & DI 基本知识1.1 IoC 的基本概念:1.2 IoC 的优势:1.3 DI 介绍: 二、IoC 详解2.1 Spring 容器:2.2 被存储 Bean 的命名约定:2.3 Bean 的存储方式:2.3.1 五大类注解:2.3.1.…

MySQL高阶2010-职员招聘人数2

目录 题目 准备数据 分析数据 总结 题目 一家公司想雇佣新员工。公司的工资预算是 $70000 。公司的招聘标准是: 继续雇佣薪水最低的高级职员,直到你不能再雇佣更多的高级职员。用剩下的预算雇佣薪水最低的初级职员。继续以最低的工资雇佣初级职员&…

linux文件编程_进程

1. 进程相关概念 面试中关于进程,应该会问的的几个问题: 1.1. 什么是程序,什么是进程,有什么区别? 程序是静态的概念,比如: 磁盘中生成的a.out文件,就叫做:程序进程是…

Linux常用语法

Linux常用语法 0.引言特殊路径符Linux 命令基础格式重要命令mkdir命令echo-tail命令 vi\vim编辑器的三种工作模式vi/vim简单介绍基础命令 运行模式命令模式下的快捷键 进程管理进程的命令 Linux解压缩tar格式zip命令unzip命令 ping,wget,curl等命令的使用Linux端口端口端口的划…

【算法篇】回溯算法类(1)(笔记)

目录 一、理论基础 1. 相关题目 2. 遍历过程 3. 代码框架 二、LeetCode 题目 1. 组合 2. 组合总和III 3. 电话号码的字母组合 4. 组合总和 5. 组合总和II 6. 分割回文串 7. 复原IP地址 8. 子集 一、理论基础 1. 相关题目 2. 遍历过程 3. 代码框架 void backtr…

光通信——APON/EPON/GPON/10G PON

目录 APON EPON GPON 上下行对称和非对称速率 OAM功能 汇聚子层 ATM封装方式 GEM封装方式 10G EPON EPON/GPON技术原理和特点 工作原理 关键技术 (1)测距、同步 (2)突发发送和接收 (3&#xff09…

基于Word2Vec和LSTM实现微博评论情感分析

关于深度实战社区 我们是一个深度学习领域的独立工作室。团队成员有:中科大硕士、纽约大学硕士、浙江大学硕士、华东理工博士等,曾在腾讯、百度、德勤等担任算法工程师/产品经理。全网20多万粉丝,拥有2篇国家级人工智能发明专利。 社区特色…

【mmengine】优化器封装(OptimWrapper)(入门)优化器封装 vs 优化器

MMEngine 实现了优化器封装,为用户提供了统一的优化器访问接口。优化器封装支持不同的训练策略,包括混合精度训练、梯度累加和梯度截断。用户可以根据需求选择合适的训练策略。优化器封装还定义了一套标准的参数更新流程,用户可以基于这一套流…

SWAP、AquaCrop、FVCOM、Delft3D、SWAT、R+VIC、HSPF、HEC-HMS......

全流程SWAP农业模型数据制备、敏感性分析及气候变化影响实践技术应用 SWAP模型是由荷兰瓦赫宁根大学开发的先进农作物模型,它综合考虑了土壤-水分-大气以及植被间的相互作用;是一种描述作物生长过程的一种机理性作物生长模型。它不但运用Richard方程&…

2024最新软件测试八股文(含答案+文档)

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 一、软件测试基础面试题 1、阐述软件生命周期都有哪些阶段? 常见的软件生命周期模型有哪些? 软件生命周期是指一个计算机软件从功能确定设计,到…