1 关于PIL库
1.1 PIL简单介绍
PIL
是Python的一个图像处理库,支持多种文件格式;PIL
提供强大的图像处理和图形处理能力;- 可完成对图像的缩放、裁剪、叠加以及图像添加线条、图像和文字等操作。
- 安装的话,使用以下命令:
pip install Pillow
1.2 常见PIL子库或类
- 目录在:
Python37Libsite-packagesPIL
- 以下是
PIL
的常见子库或者常见的类及说明:
类或子库 | 说明 |
---|---|
| 最重要的模块,如创建、打开、显示、保存图像等功能,合成、裁剪、滤波等功能,获取图像属性功能,如图像直方图、通道数等 |
| 算术图形操作,如图像特效,图像组合,算法绘图等 |
| 允许用户检测和测量图像的各种特性 |
| 基本的图形处理功能,如可创建新图像,注释或润饰已存在图像,为web应用实时产生各种图形 |
| 图像增强 |
| 为图像打开和保存功能提供了相关支持功能 |
| 从一个 |
| 各种滤波器的预定义集合 |
| 字体库 |
| 将屏幕上的内容拷贝到一个 |
| 可完成直方图均衡、裁剪、量化、镜像等操作 |
| 存储和操作二维向量数据 |
| 为图像序列中每一帧提供了迭代器 |
| 计算一张图像或者一张图像的一个区域的全局统计值 |
| 创建和修改 |
| 为 |
2 ImageFilter模块滤波处理
2.1 图片轮廓
- 说明:将图像中的轮廓信息全部提取出来;
- 方法:
ImageFilter.CONTOUR
; - 示例:
from PIL import Image, ImageFilter
class TestImage():
def __init__(self):
super(TestImage, self).__init__()
self.img = Image.open("./image06.jpg")
# self.img.show()
# 图片轮廓
def test_contur(self):
self.contur = self.img.filter(ImageFilter.CONTOUR)
# self.contur.show()
self.contur.save("image06_contur.jpg")
if __name__ == "__main__":
image = TestImage()
image.test_contur()
- 显示效果: 在这里插入图片描述
2.2 浮雕效果
- 说明:使图像呈现出浮雕效果;
- 方法:
ImageFilter.EMBOSS
; - 示例:
# 浮雕效果
def test_emboss(self):
self.emboss = self.img.filter(ImageFilter.EMBOSS)
# self.emboss.show()
self.emboss.save("image07_emboss.jpg")
- 显示效果: 在这里插入图片描述
2.3 边缘增强
- 说明:会使得图像中边缘部分更加明显;
- 方法:
ImageFilter.EDGE_ENHANCE_MORE
; - 示例:
def test_enhance_m(self):
self.enhance = self.img.filter(ImageFilter.EDGE_ENHANCE_MORE)
# self.enhance.show()
self.enhance.save("image08_enhance.jpg")
- 显示效果: 在这里插入图片描述
2.4 图片模糊
- 说明:使得处理后的图片变得模糊;
- 方法:
ImageFilter.BLUR
; - 示例:
def test_blur(self):
self.blur = self.img.filter(ImageFilter.BLUR)
# self.blur.show()
self.blur.save("image09_blur.jpg")
- 显示效果: 在这里插入图片描述
2.5 细节增强
- 说明:使图像中细节更加明显;
- 方法:
ImageFilter.DETAIL
; - 示例:
def test_detail(self):
self.detail = self.img.filter(ImageFilter.DETAIL)
self.detail.save("image10_detail.jpg")
- 显示效果: 在这里插入图片描述
2.6 不同灰度边缘增强
- 说明:加强和改善图像中不同灰度区域之间的边界和轮廓;
- 方法:
ImageFilter.EDGE_ENHANCE
; - 示例:
def test_enhance(self):
self.enhance01 = self.img.filter(ImageFilter.EDGE_ENHANCE)
self.enhance01.save("image11_enhance01.jpg")
- 显示效果: 在这里插入图片描述
2.7 寻找边缘信息
- 说明:找出图像中的边缘信息;
- 方法:
ImageFilter.FIND_EDGES
; - 示例:
def test_find_edges(self):
self.find_edges = self.img.filter(ImageFilter.FIND_EDGES)
self.find_edges.save("image12_find_edges.jpg")
- 显示效果: 在这里插入图片描述
2.8 平滑处理
- 说明:使图像亮度平缓渐变,减小突变梯度;
- 方法:
ImageFilter.SMOOTH
; - 示例:
def test_smooth(self):
self.smooth = self.img.filter(ImageFilter.SMOOTH)
self.smooth.save("image13_smooth.jpg")
- 显示效果: 在这里插入图片描述
2.9 深度平滑处理
- 说明:使图像更加平滑;
- 方法:
ImageFilter.SMOOTH_MORE
; - 示例:
def test_smooth_m(self):
self.smooth_m = self.img.filter(ImageFilter.SMOOTH_MORE)
self.smooth_m.save("image14_smooth_m.jpg")
- 显示效果: 在这里插入图片描述
2.10 锐化处理
- 说明:补偿图像的轮廓;
- 方法:
ImageFilter.SHARPEN
; - 示例:
def test_sharpen(self):
self.sharpen = self.img.filter(ImageFilter.SHARPEN)
self.sharpen.save("image15_sharpen.jpg")
- 显示效果: 在这里插入图片描述
3 完整源码
代码语言:python代码运行次数:0复制# -*- coding:utf-8 -*-
# 作者:虫无涯
# 日期:2023/11/20
# 文件名称:test_pil.py
# 作用:图片效果处理
from PIL import Image, ImageFilter
class TestImage():
def __init__(self):
super(TestImage, self).__init__()
self.img = Image.open("./image06.jpg")
# self.img.show()
# 图片轮廓
def test_contur(self):
self.contur = self.img.filter(ImageFilter.CONTOUR)
# self.contur.show()
self.contur.save("image06_contur.jpg")
# 浮雕效果
def test_emboss(self):
self.emboss = self.img.filter(ImageFilter.EMBOSS)
# self.emboss.show()
self.emboss.save("image07_emboss.jpg")
# 边界增强
def test_enhance_m(self):
self.enhance = self.img.filter(ImageFilter.EDGE_ENHANCE_MORE)
# self.enhance.show()
self.enhance.save("image08_enhance.jpg")
# 图片模糊
def test_blur(self):
self.blur = self.img.filter(ImageFilter.BLUR)
# self.blur.show()
self.blur.save("image09_blur.jpg")
# 细节增强
def test_detail(self):
self.detail = self.img.filter(ImageFilter.DETAIL)
self.detail.save("image10_detail.jpg")
# 不同灰度边缘增强
def test_enhance(self):
self.enhance01 = self.img.filter(ImageFilter.EDGE_ENHANCE)
self.enhance01.save("image11_enhance01.jpg")
# 找出图像中的边缘信息
def test_find_edges(self):
self.find_edges = self.img.filter(ImageFilter.FIND_EDGES)
self.find_edges.save("image12_find_edges.jpg")
# 平滑处理
def test_smooth(self):
self.smooth = self.img.filter(ImageFilter.SMOOTH)
self.smooth.save("image13_smooth.jpg")
# 深度平滑处理
def test_smooth_m(self):
self.smooth_m = self.img.filter(ImageFilter.SMOOTH_MORE)
self.smooth_m.save("image14_smooth_m.jpg")
# 锐化处理
def test_sharpen(self):
self.sharpen = self.img.filter(ImageFilter.SHARPEN)
self.sharpen.save("image15_sharpen.jpg")
if __name__ == "__main__":
image = TestImage()
# image.test_contur()
# image.test_emboss()
# image.test_enhance_m()
# image.test_blur()
# image.test_detail()
# image.test_find_edges()
# image.test_smooth()
# image.test_smooth_m()
image.test_sharpen()
我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!