1 关于PIL库
1.1 PIL简单介绍
PIL
是Python的一个图像处理库,支持多种文件格式;
PIL
提供强大的图像处理和图形处理能力;
- 可完成对图像的缩放、裁剪、叠加以及图像添加线条、图像和文字等操作。
- 安装的话,使用以下命令:
python
复制代码
pip install Pillow
1.2 常见PIL子库或类
python
复制代码
Python37\Lib\site-packages\PIL
类或子库 |
说明 |
Image |
最重要的模块,如创建、打开、显示、保存图像等功能,合成、裁剪、滤波等功能,获取图像属性功能,如图像直方图、通道数等 |
ImageChops |
算术图形操作,如图像特效,图像组合,算法绘图等 |
ImageCrackCode |
允许用户检测和测量图像的各种特性 |
ImageDraw |
基本的图形处理功能,如可创建新图像,注释或润饰已存在图像,为web应用实时产生各种图形 |
ImageEnhance |
图像增强 |
ImageFile |
为图像打开和保存功能提供了相关支持功能 |
ImageFileIO |
从一个socket 或者其他流设备中读取一张图像 |
ImageFilter |
各种滤波器的预定义集合 |
ImageFont |
字体库 |
ImageGrab |
将屏幕上的内容拷贝到一个PIL 图像内存中 |
ImageOps |
可完成直方图均衡、裁剪、量化、镜像等操作 |
ImagePath |
存储和操作二维向量数据 |
ImageSequence |
为图像序列中每一帧提供了迭代器 |
ImageStat |
计算一张图像或者一张图像的一个区域的全局统计值 |
ImageTk |
创建和修改BitmapImage 和PhotoImage 对象中的Tkinter |
PSDraw |
为Postscript 打印机提供基本的打印支持 |
2 ImageFilter模块滤波处理
2.1 图片轮廓
- 说明:将图像中的轮廓信息全部提取出来;
- 方法:
ImageFilter.CONTOUR
;
- 示例:
python
复制代码
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
;
- 示例:
python
复制代码
# 浮雕效果
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
;
- 示例:
python
复制代码
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
;
- 示例:
python
复制代码
def test_blur(self):
self.blur = self.img.filter(ImageFilter.BLUR)
# self.blur.show()
self.blur.save("image09_blur.jpg")
- 显示效果:
2.5 细节增强
- 说明:使图像中细节更加明显;
- 方法:
ImageFilter.DETAIL
;
- 示例:
python
复制代码
def test_detail(self):
self.detail = self.img.filter(ImageFilter.DETAIL)
self.detail.save("image10_detail.jpg")
- 显示效果:
2.6 不同灰度边缘增强
- 说明:加强和改善图像中不同灰度区域之间的边界和轮廓;
- 方法:
ImageFilter.EDGE_ENHANCE
;
- 示例:
python
复制代码
def test_enhance(self):
self.enhance01 = self.img.filter(ImageFilter.EDGE_ENHANCE)
self.enhance01.save("image11_enhance01.jpg")
- 显示效果:
2.7 寻找边缘信息
- 说明:找出图像中的边缘信息;
- 方法:
ImageFilter.FIND_EDGES
;
- 示例:
python
复制代码
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
;
- 示例:
python
复制代码
def test_smooth(self):
self.smooth = self.img.filter(ImageFilter.SMOOTH)
self.smooth.save("image13_smooth.jpg")
- 显示效果:
2.9 深度平滑处理
- 说明:使图像更加平滑;
- 方法:
ImageFilter.SMOOTH_MORE
;
- 示例:
python
复制代码
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
;
- 示例:
python
复制代码
def test_sharpen(self):
self.sharpen = self.img.filter(ImageFilter.SHARPEN)
self.sharpen.save("image15_sharpen.jpg")
- 显示效果:
3 完整源码
python
复制代码
# -*- coding:utf-8 -*-
# 作者:虫无涯
# 日期:2023/11/20
# 文件名称:test_pil.py
# 作用:图片效果处理
# 联系:VX(NoamaNelson)
# 博客:https://blog.csdn.net/NoamaNelson
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()