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

Python Imaging Library (PIL) 全面指南:PIL基础入门-图像处理与数据预处理

图像裁剪与调整

学习目标

通过本课程,学员将掌握如何使用Python Imaging Library (PIL)进行图像的基本处理,包括裁剪、调整大小和旋转图像。这些技能对于图像处理、数据分析和机器学习项目中的数据预处理非常有用。

相关知识点

  • 图像裁剪与调整

学习内容

1 图像裁剪与调整

1. 1 使用PIL裁剪图像

在图像处理中,裁剪是一个非常常见的操作,它可以从原始图像中提取特定的区域。这在去除不需要的背景、聚焦于图像的特定部分或准备图像以适应特定的显示尺寸时非常有用。PIL库提供了简单而强大的方法来实现这一点。

1.1.1 裁剪的基本概念

裁剪图像涉及到指定一个矩形区域,该区域定义了想要保留的图像部分。这个矩形通常由左上角的坐标(x, y)和宽度(width)与高度(height)来定义。在PIL中,使用crop()方法来执行裁剪操作。crop()方法接受一个四元组参数,该参数定义了裁剪区域的左、上、右和下边界。

1.1.2 实践操作

首先,需要安装PIL库。PIL库在Python 3中通常被称为Pillow,可以通过pip安装:

%pip install p

接下来,加载一张图像,并从中裁剪出一个特定的区域。假设有一张名为example.png的图像,想要从该图像中裁剪出一个100x100像素的区域,该区域的左上角位于(50, 50)。

from PIL import Image# 打开图像文件
img = Image.open('example.png')# 定义裁剪区域
area = (50, 50, 150, 150)  # (left, upper, right, lower)# 裁剪图像
cropped_img = img.crop(area)# 显示裁剪后的图像
cropped_img.show()# 保存裁剪后的图像
cropped_img.save('cropped_example.jpg')

这段代码首先导入了Image模块,然后使用Image.open()方法打开图像文件。接着,定义了一个裁剪区域,该区域是一个四元组,指定了裁剪的左、上、右和下边界。crop()方法用于裁剪图像,show()方法用于显示裁剪后的图像,最后save()方法将裁剪后的图像保存到文件中。

1.2 调整图像大小

调整图像大小是图像处理中的另一个基本操作,它可以将图像缩放到不同的尺寸。这在准备图像以适应不同的显示设备或减少文件大小时非常有用。PIL库提供了resize()方法来调整图像的大小。

1.2.1 调整大小的基本概念

调整图像大小涉及到指定新的宽度和高度。在PIL中,resize()方法接受一个元组参数,该参数定义了新的宽度和高度。此外,还可以指定一个可选的重采样滤波器,以提高调整大小后的图像质量。

1.2.2 实践操作

使用PIL库调整一张图像的大小。假设有一张名为example.png的图像,想要将其调整为200x200像素。

from PIL import Image# 打开图像文件
img = Image.open('example.png')# 定义新的尺寸
new_size = (200, 200)# 调整图像大小
resized_img = img.resize(new_size)# 显示调整大小后的图像
resized_img.show()# 保存调整大小后的图像
resized_img.save('resized_example.jpg')

这段代码首先导入了Image模块,然后使用Image.open()方法打开图像文件。接着,定义了一个新的尺寸,该尺寸是一个元组,指定了新的宽度和高度。resize()方法用于调整图像的大小,show()方法用于显示调整大小后的图像,最后save()方法将调整大小后的图像保存到文件中。

1.3 旋转图像

旋转图像是图像处理中的另一个常见操作,它可以将图像旋转到不同的角度。这在调整图像方向或创建视觉效果时非常有用。PIL库提供了rotate()方法来旋转图像。

1.3.1 旋转的基本概念

旋转图像涉及到指定一个旋转角度。在PIL中,rotate()方法接受一个角度参数,该参数定义了旋转的角度。此外,还可以指定一个可选的扩展参数,以确保旋转后的图像不会被裁剪。

1.3.2 实践操作

使用PIL库旋转一张图像。

from PIL import Image# 打开图像文件
img = Image.open('example.png')# 定义旋转角度
angle = 90# 旋转图像
rotated_img = img.rotate(angle, expand=True)# 显示旋转后的图像
rotated_img.show()# 保存旋转后的图像
rotated_img.save('rotated_example.jpg')

这段代码首先导入了Image模块,然后使用Image.open()方法打开图像文件。接着,定义了一个旋转角度,该角度是一个整数,指定了旋转的角度。rotate()方法用于旋转图像,expand=True参数确保旋转后的图像不会被裁剪。show()方法用于显示旋转后的图像,最后save()方法将旋转后的图像保存到文件中。

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

相关文章:

  • Maven 编译打包一个比较有趣的问题
  • yolo学习笔记01——前置基础
  • 【力扣】2715. 执行可取消的延迟函数
  • 生产环境Vue组件报错:Cannot access before initialization
  • 将 agents 连接到 Elasticsearch 使用模型上下文协议 - docker
  • 前后端分离情况下,将本地vue项目和Laravel项目以及mysql放到自己的云服务器
  • 工业 5G + AI:智能制造的未来引擎
  • Mybatis-增删改查
  • 逻辑回归以及损失函数
  • 数字孪生(Digital Twin):未来产业与城市的智慧引擎
  • AI Agent从0到1:剖析Block与GSK的两种产品化落地路径
  • 容器学习04-kubernetes(k8s)
  • 海康相机开发---设备登录
  • (二分查找)Leetcode34. 在排序数组中查找元素的第一个和最后一个位置+74. 搜索二维矩阵
  • 【LInux】常用命令笔记
  • Linux之Shell编程(一)
  • 异步方法和多线程有什么区别,他们的实现逻辑是什么以及为什么异步方法: 不能和调用者在同一个类中
  • VisionPro联合编程控件导入WinFrom以及VS卡死问题
  • GCC版本和C语言标准版本的对应关系
  • 一个Demo射击小计(纯蓝图)
  • 前端学习 10-1 :验证中的UVM
  • .Net Core Web 架构(管道机制)的底层实现
  • jadx反向编译JAR包
  • 基于SQL数据库的智能问答系统设计与实现
  • Codeforces Round 1043 (Div. 3) D. From 1 to Infinity
  • 2025年9月计算机二级C++语言程序设计——选择题打卡Day9
  • 【数据分享】珠江三角洲水系地理空间全套数据集
  • x64dbg的基本调试操作 (未完,待补充)
  • 通信协议再升级,PROFINET和EtherNet IP网关迎接改造升级大挑战
  • 智慧清洁革新者:有鹿机器人自述