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

Python Imaging Library (PIL) 全面指南:PIL基础入门-Python图像处理实战

PIL图像处理

学习目标

通过本课程,学员将掌握PIL(Python Imaging Library)的基本使用方法,了解如何利用PIL进行图像的加载、显示、保存以及基本的图像处理操作。帮助学员理解PIL在图像处理中的强大功能,以及它为何成为Python中处理图像的首选库之一。

相关知识点

  • PIL图像处理

学习内容

1 PIL图像处理

PIL,全称Python Imaging Library,是一个用于处理图像的Python库。它提供了广泛的文件格式支持,以及强大的图像处理能力。PIL最初由Fredrik Lundh开发,后来由Python Imaging Library开发团队维护。随着时间的发展,PIL的维护逐渐停止,社区推出了Pillow,这是一个PIL的分支,增加了对更多图像格式的支持,并修复了PIL中的一些bug。因此,现在提到PIL,通常指的是Pillow。

1.1 安装Pillow

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

%pip install pillow
1.2 基本使用

安装完成后,使用wget方式进行图片的下载,下载完成后可以通过以下代码来加载一张图片:

!wget --no-check-certificate https://model-community-picture.obs.cn-north-4.myhuaweicloud.com/ascend-zone/notebook_datasets/f11284f42ed511f0a34cfa163edcddae/example.png
from PIL import Image# 加载图片
img = Image.open('test.jpg')
# 显示图片
img.show()

在这里插入图片描述

这段代码首先从PIL库中导入了Image模块,然后使用Image.open()函数加载了一张名为example.png的图片,并通过img.show()方法显示了这张图片。

1.3 图像的基本操作:加载、显示与保存

在图像处理中,加载、显示和保存是最基本的操作。PIL提供了简单易用的接口来完成这些操作。

1.3.1 加载图像

加载图像是使用PIL进行图像处理的第一步。我们可以通过Image.open()函数来加载图像文件。这个函数接受一个文件路径作为参数,返回一个Image对象。

from PIL import Image# 加载图像
img = Image.open('test.jpg')
1.3.2 显示图像

显示图像是指将图像显示在屏幕上。PIL的Image对象有一个show()方法,可以用来显示图像。

# 显示图像
img.show()

显示和上图一样。

1.3.3 保存图像

保存图像是指将处理后的图像保存到文件中。PIL的Image对象有一个save()方法,可以用来保存图像。这个方法接受一个文件路径作为参数,还可以接受一个可选的格式参数。

# 保存图像
img.save('testoutput.png', 'PNG')
1.4 图像处理:裁剪、缩放与旋转

PIL不仅支持图像的基本操作,还提供了丰富的图像处理功能,如裁剪、缩放和旋转等。

1.4.1 裁剪图像

裁剪图像是指从原图中提取出一个矩形区域。PIL的Image对象有一个crop()方法,可以用来裁剪图像。这个方法接受一个四元组作为参数,表示裁剪区域的左上角和右下角坐标。

# 裁剪图像
cropped_img = img.crop((50, 50, 200, 200))
cropped_img.show()

在这里插入图片描述

1.4.2 缩放图像

缩放图像是指改变图像的大小。PIL的Image对象有一个resize()方法,可以用来缩放图像。这个方法接受一个元组作为参数,表示新的宽度和高度。

# 缩放图像
resized_img = img.resize((300, 300))
resized_img.show()

在这里插入图片描述

1.4.3 旋转图像

旋转图像是指将图像旋转一定的角度。PIL的Image对象有一个rotate()方法,可以用来旋转图像。这个方法接受一个角度作为参数,表示旋转的角度。

# 旋转图像
rotated_img = img.rotate(90)
rotated_img.show()

在这里插入图片描述

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

相关文章:

  • 多版本兼容的golang客服系统
  • 稀土:从“稀有”到“命脉”的科技核心
  • 通过概率正 - 未标记网络从医学图像的特定感兴趣区域中学习|文献速递-深度学习人工智能医疗图像
  • 【底层机制】thread_local 变量的初始化时机和生命周期
  • Spring Retry Spring 生态系统优雅的重试组件
  • 浏览器网页路径扫描器(脚本)
  • SQL优化:SQL模拟Split二维数组
  • Linux 基础开发工具
  • django-redis 使用类实现和使用
  • React(面试)
  • JUC之异步编程理论总结
  • 实现基于数据库 flag 状态的消息消费控制
  • 【docker】P1 虚拟化与容器化
  • 全球协作无障碍:cpolar+Nextcloud实现跨国文件共享
  • 通过远程桌面横向移动(破解凭证)
  • 【51单片机】【protues仿真】 基于51单片机出租车计价器系统
  • 三轴云台之动态性能篇
  • 数字化时代催生变革,楼宇自控系统成为建筑管理新潮流的引领者
  • ESP32S3:开发环境搭建、VSCODE 单步调试、Systemview 分析任务运行情况
  • 北斗导航|接收机自主完好性监测算法综述
  • 【C++】类和对象 --- 类中的6个默认成员函数
  • CAS 浅析
  • 视觉语言模型应用开发——Qwen 2.5 视觉语言模型的零样本学习能力在多模态内容审核中的实践研究
  • 把CentOS 7默认yum源改成腾讯云镜像
  • 阿里云——云存储与数据库服务
  • RustFS架构解密:零GC设计如何实现12μs级存储延迟?
  • 【lucene】SpanNearQuery中的slop
  • 【lucene】SpanFirstQuery的end参数
  • 【Python】包管理,弄明白import,package,module
  • 复杂网络环境实测:主流云VR产品性能对比——平行云LarkXR突破网络限制 引领云VR技术新高度