使用Python进行图像处理的11个基本操作
文末附Python编程资料~~
大家好!今天我们将一起探索如何使用 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()
************************************************### 使用Python进行图像处理的11个基本操作(二)
在第一部分中,我们介绍了使用 Python 和 Pillow
库进行图像处理的基本操作,包括导入图像、获取图像尺寸、裁剪图像、图像缩放、图像旋转、图像翻转、改变颜色模式、添加边框、图像合成、图像拼接以及应用滤镜。接下来,我们将通过一个实际场景的实战案例来进一步巩固这些知识点。
实战案例:制作个性化名片
假设我们要为一家公司设计一套个性化的名片模板。名片模板应该包含员工的照片、姓名、职位等信息。我们将使用前面学到的操作来实现这一目标。
1. 准备素材
首先,我们需要准备以下素材:
-
一张背景图片(例如
background.jpg
)。 -
一张员工照片(例如
employee.jpg
)。 -
名字和职位信息(例如 “John Doe” 和 “Software Engineer”)。
2. 导入必要的库和图片
from PIL import Image, ImageDraw, ImageFont # 打开背景图片
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()
分析
在这个实战案例中,我们综合运用了前面介绍的各种图像处理技术: 1. 导入图片:使用 Image.open
方法导入背景图片和员工照片。 2. 调整大小:使用 resize
方法调整照片的大小。 3. 添加边框:使用 ImageOps.expand
方法为照片添加边框。 4. 粘贴图片:使用 paste
方法将照片粘贴到背景图片上。 5. 绘制文本:使用 ImageDraw
和 ImageFont
绘制名字和职位信息。 6. 应用滤镜:使用 filter
方法为背景图片添加模糊滤镜效果。
通过这个案例,我们可以看到如何将多个图像处理技术结合起来,实现一个实用的功能。希望这个实战案例能够帮助大家更好地理解和掌握 Python 图像处理的基础知识。
好了,今天的分享就到这里了,我们下期见。如果本文对你有帮助,请动动你可爱的小手指点赞、收藏吧!
文末福利
最后,如果你对Python感兴趣的话,可以试试我整理的这一份全套的Python学习资料,【点击这里】免费领取!
包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、自动化办公等学习教程。
也可以微信扫描下方CSDN官方认证二维码免费获取【保证100%免费】。
① Python所有方向的学习路线图,清楚各个方向要学什么东西
② 100多节Python课程视频,涵盖必备基础、爬虫和数据分析
③ 100多个Python实战案例,学习不再是只会理论
④ 华为出品独家Python漫画教程,手机也能学习