百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

如何使用Python进行图像处理:Pillow库实战指南

off999 2024-10-20 08:06 23 浏览 0 评论

大家好!今天我们将一起探索如何使用Python进行图像处理。Python是一种非常强大的编程语言,尤其适合图像处理。我们将使用Pillow库来完成这些任务。如果你还没有安装这个库,可以通过下面的命令安装:

pip install pillow

1. 导入图像

首先,我们需要导入一张图片。这里以一张名为'example.jpg'的图片为例。

from PIL import Image
# 打开图片
img = Image.open('example.jpg')
# 显示图片
img.show()

这段代码首先导入了`Image`类,然后使用`open`方法打开图片,并使用`show`方法显示它。

2. 获取图像尺寸

获取图片的宽度和高度是图像处理中最常见的需求之一。

width, height = img.size
print(f"图片尺寸: {width}x{height}")

'size'属性返回一个元组,表示图片的宽度和高度。

3. 裁剪图像

裁剪可以用来移除图片中不需要的部分。

# 裁剪参数:左上角坐标 (left, top) 和右下角坐标 (right, bottom)
cropped_img = img.crop((50, 50, 200, 200))
cropped_img.show()

这里将图片从(50, 50)到(200, 200)区域裁剪下来。

4. 图像缩放

有时候我们需要调整图片大小,使其更适合特定的应用场景。

resized_img = img.resize((400, 400))
resized_img.show()

'resize'方法接受一个元组作为参数,表示新的宽度和高度。

5. 图像旋转

旋转图片可以帮助我们改变图片的方向。

rotated_img = img.rotate(90) # 逆时针旋转90度
rotated_img.show()

'rotate'方法接受一个角度值,表示旋转的角度。

6. 图像翻转

翻转可以分为水平翻转和垂直翻转两种。

# 水平翻转
flipped_horizontal = img.transpose(Image.FLIP_LEFT_RIGHT)
flipped_horizontal.show()
# 垂直翻转
flipped_vertical = img.transpose(Image.FLIP_TOP_BOTTOM)
flipped_vertical.show()

'transpose'方法提供了多种翻转方式,'FLIP_LEFT_RIGHT'表示水平翻转,'FLIP_TOP_BOTTOM'表示垂直翻转。

7. 改变颜色模式

有时候我们需要将图片转换为灰度图或黑白图。

# 转换为灰度图
gray_img = img.convert('L')
gray_img.show()
# 转换为黑白图
bw_img = img.convert('1')
bw_img.show()

'convert'方法接受一个模式字符串作为参数,'L'表示灰度图,'1'表示黑白图。

8. 添加边框

给图片添加边框可以让图片看起来更加美观。

bordered_img = ImageOps.expand(img, border=10, fill='red')
bordered_img.show()

'expand'方法接受三个参数:原始图片、边框宽度和填充颜色。

9. 图像合成

我们可以将两张图片合并在一起,创建出新的效果。

from PIL import ImageDraw
# 打开另一张图片
overlay_img = Image.open('overlay.png')
# 创建一个新的空白图像
result = Image.new('RGB', img.size)
# 将两张图片粘贴到新图像上
result.paste(img, (0, 0))
result.paste(overlay_img, (0, 0), overlay_img)
result.show()

这里使用`paste`方法将两张图片粘贴到一个新的空白图像上,第二张图片会覆盖第一张图片。

10. 图像拼接

拼接多张图片可以让它们排列在一起。

# 创建一个新的空白图像
new_img = Image.new('RGB', (img.width * 2, img.height))
# 将两张图片拼接在一起
new_img.paste(img, (0, 0))
new_img.paste(img, (img.width, 0))
new_img.show()

这段代码将两张相同大小的图片拼接在一起,形成了一张宽两倍的新图片。

11. 图像滤镜

使用滤镜可以快速地改变图片的效果。

from PIL import ImageFilter
# 应用模糊滤镜
blurred_img = img.filter(ImageFilter.BLUR)
blurred_img.show()
# 应用锐化滤镜
sharpened_img = img.filter(ImageFilter.SHARPEN)
sharpened_img.show()

实战案例:制作个性化名片

假设我们要为一家公司设计一套个性化的名片模板。名片模板应该包含员工的照片、姓名、职位等信息。我们将使用前面学到的操作来实现这一目标。

1. 准备素材

首先,我们需要准备以下素材:

  • 一张背景图片(例如`background.jpg`)。
  • 一张员工照片(例如`employee.jpg`)。
  • 名字和职位信息(例如“John Doe”和“Software Engineer”)。

2. 导入必要的库和图片

from PIL import Image, ImageDraw, ImageFont, ImageOps, ImageFilter
# 打开背景图片
background = Image.open('background.jpg')
# 打开员工照片
photo = Image.open('employee.jpg')

3. 调整员工照片大小并添加边框

为了让照片更好地适应名片的大小,我们需要先调整照片的尺寸,并为其添加边框。

# 调整照片大小
photo_resized = photo.resize((200, 200))
# 添加边框
photo_bordered = ImageOps.expand(photo_resized, border=10, fill='white')

4. 在背景图片上粘贴照片

接下来,我们需要将调整好的照片粘贴到背景图片上的指定位置。

# 粘贴照片
background.paste(photo_bordered, (50, 50), photo_bordered)

5. 添加文本信息

为了在名片上添加名字和职位信息,我们需要使用`ImageDraw`和`ImageFont`来绘制文本。

# 创建绘图对象
draw = ImageDraw.Draw(background)
# 设置字体
font = ImageFont.truetype('arial.ttf', 36)
# 绘制名字
name_text = 'John Doe'
draw.text((300, 100), name_text, font=font, fill=(0, 0, 0))
# 绘制职位
position_text = 'Software Engineer'
draw.text((300, 150), position_text, font=font, fill=(0, 0, 0))

6. 应用滤镜效果

为了让名片看起来更有质感,我们可以为背景图片添加一些滤镜效果。

# 应用模糊滤镜
background_blurred = background.filter(ImageFilter.BLUR)

7. 显示最终结果

最后,我们可以显示生成的名片模板。

background_blurred.show()

完整代码

from PIL import Image, ImageDraw, ImageFont, ImageOps, ImageFilter
# 打开背景图片
background = Image.open('background.jpg')
# 打开员工照片
photo = Image.open('employee.jpg')
# 调整照片大小
photo_resized = photo.resize((200, 200))
# 添加边框
photo_bordered = ImageOps.expand(photo_resized, border=10, fill='white')
# 粘贴照片
background.paste(photo_bordered, (50, 50), photo_bordered)
# 创建绘图对象
draw = ImageDraw.Draw(background)
# 设置字体
font = ImageFont.truetype('arial.ttf', 36)
# 绘制名字
name_text = 'John Doe'
draw.text((300, 100), name_text, font=font, fill=(0, 0, 0))
# 绘制职位
position_text = 'Software Engineer'
draw.text((300, 150), position_text, font=font, fill=(0, 0, 0))
# 应用模糊滤镜
background_blurred = background.filter(ImageFilter.BLUR)
# 显示最终结果
background_blurred.show()

通过这个案例,我们可以看到如何将多个图像处理技术结合起来,实现一个实用的功能。希望这个实战案例能够帮助大家更好地理解和掌握Python图像处理的基础知识。

相关推荐

推荐一款Python的GUI可视化工具(python 可视化工具)

在Python基础语法学习完成后,进一步开发应用界面时,就需要涉及到GUI了,GUI全称是图形用户界面(GraphicalUserInterface,又称图形用户接口),采用图形方式显示的计算机操...

教你用Python绘制谷歌浏览器的3种图标

前两天在浏览matplotlib官方网站时,笔者无意中看到一个挺有意思的图片,就是用matplotlib制作的火狐浏览器的logo,也就是下面这个东东(网页地址是https://matplotlib....

小白学Python笔记:第二章 Python安装

Windows操作系统的python安装:Python提供Windows、Linux/UNIX、macOS及其他操作系统的安装包版本,结合自己的使用情况,此处仅记录windows操作系统的python...

Python程序开发之简单小程序实例(9)利用Canvas绘制图形和文字

Python程序开发之简单小程序实例(9)利用Canvas绘制图形和文字一、项目功能利用Tkinter组件中的Canvas绘制图形和文字。二、项目分析要在窗体中绘制图形和文字,需先导入Tkinter组...

一文吃透Python虚拟环境(python虚拟环境安装和配置)

摘要在Python开发中,虚拟环境是一种重要的工具,用于隔离不同项目的依赖关系和环境配置。本文将基于windows平台介绍四种常用的Python虚拟环境创建工具:venv、virtualenv、pip...

小白也可以玩的Python爬虫库,收藏一下

最近,微软开源了一个项目叫「playwright-python」,作为一个兴起项目,出现后受到了大家热烈的欢迎,那它到底是什么样的存在呢?今天为你介绍一下这个传说中的小白神器。Playwright是...

python环境安装+配置教程(python安装后怎么配置环境变量)

安装python双击以下软件:弹出一下窗口需选择一些特定的选项默认选项不需要更改,点击next勾选以上选项,点击install进度条安装完毕即可。到以下界面,证明安装成功。接下来安装库文件返回电脑桌面...

colorama,一个超好用的 Python 库!

大家好,今天为大家分享一个超好用的Python库-colorama。Github地址:https://github.com/tartley/coloramaPythoncolorama库是一...

python制作仪表盘图(python绘制仪表盘)

今天教大家用pyecharts画仪表盘仪表盘(Gauge)是一种拟物化的图表,刻度表示度量,指针表示维度,指针角度表示数值。仪表盘图表就像汽车的速度表一样,有一个圆形的表盘及相应的刻度,有一个指针...

总结90条写Python程序的建议(python写作)

  1.首先  建议1、理解Pythonic概念—-详见Python中的《Python之禅》  建议2、编写Pythonic代码  (1)避免不规范代码,比如只用大小写区分变量、使用容易...

[oeasy]python0137_相加运算_python之禅_import_this_显式转化

变量类型相加运算回忆上次内容上次讲了是从键盘输入变量input函数可以有提示字符串需要有具体的变量接收输入的字符串输入单个变量没有问题但是输入两个变量之后一相加就非常离谱添加图片注释,不超过1...

Python入门学习记录之一:变量(python中变量的规则)

写这个,主要是对自己学习python知识的一个总结,也是加深自己的印象。变量(英文:variable),也叫标识符。在python中,变量的命名规则有以下三点:>变量名只能包含字母、数字和下划线...

掌握Python的"魔法":特殊方法与属性完全指南

在Python的世界里,以双下划线开头和结尾的"魔法成员"(如__init__、__str__)是面向对象编程的核心。它们赋予开发者定制类行为的超能力,让自定义对象像内置类型一样优雅工...

11个Python技巧 不Pythonic 实用大于纯粹

虽然Python有一套强大的设计哲学(体现在“Python之禅”中),但总有一些情况需要我们“打破规则”来解决特定问题。这触及了Python哲学中一个非常核心的理念:“实用主义胜于纯粹主义”...

Python 从入门到精通 第三课 诗意的Python之禅

导言:Python之禅,英文名是TheZenOfPython。最早由TimPeters在Python邮件列表中发表,它包含了影响Python编程语言设计的20条软件编写原则。它作为复活节彩蛋...

取消回复欢迎 发表评论: