pythonpil库过滤图像contour_Python随记【三】

本文详细介绍了Python的PIL库在图像处理中的应用,包括打开文件、文件属性和方法,以及Image类的各种操作,如转换、保存、旋转、缩放和滤镜效果。此外,还提到了NumPy库在数组操作和图像处理中的作用,以及matplotlib库用于数据可视化的功能。
摘要由CSDN通过智能技术生成

打开文件

打开文件的方法

open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)file参数:指定了被打开的文件名称

mode参数:指定了打开文件后的处理方式,默认为r读模式

buffering参数:指定了读写文件的缓存模式。0表示不缓存,1表示缓存,如大

于1则表示缓冲区的大小。默认值是缓存模式

encoding参数:指定对文本进行编码和解码的方式,只适用于文本模式,可以使

用Python支持的任何格式,如GBK、utf8、CP936等等。

open()函数返回1个文件对象,通过该文 件对象可以对文件进行读写操作。如果指定文件不存在、 访问权限不够、磁盘空间不足或其他原因导致创建文件对 象失败则抛出异常。

即使写了关闭文件的代码,也无法保证文件一定能 够正常关闭。例如,如果在打开文件之后和关闭文件之前 发生了错误导致程序崩溃,这时文件就无法正常关闭。在 管理文件对象时推荐使用with关键字

例如:1

2

3with open('data.txt', 'r') as f:

data = f.read()

print('context: {}'.format(data))

打开文件的方式

8194d8345c8ff8cedb8863b304bb0317.png

文件的常用属性

c539a207b3f96eca2827cac986076ce1.png

例如:1

2

3with open('test.txt') as f:

print(f.mode)

f.close()

输出为r

文件的常用方法read([size]): 从文本文件中读取size个字符(Python 3.x)的内容作为结果返回,或从二进制文件

中读取指定数量的字节并返回,如果省略size则表示读取所有内容

write(s) :把s的内容写入文件

writelines(s) :把字符串列表写入文本文件,不添加换行符

readline() :从文本文件中读取一行内容作为结果返回

readlines() :把文本文件中的每行文本作为一个字符串存入列表中,返回该列表,对于大文件会占 用较多内存,不建议使用

seek(offset[, whence]): 把文件指针移动到新的字节位置,offset表示相对于whence的位置。whence为0表示从 文件头开始计算,1表示从当前位置开始计算,2表示从文件尾开始计算,默认为0

tell() :返回文件指针的当前位置

flush() :把缓冲区的内容写入文件,但不关闭文件

close():关闭文件

关于于seek()方法的是把 文件指针定位到文件中指定字节的位置,所以若为中文,则注意一个汉字两个字节其他文件操作查看:Python文件

文件级操作

Python的多种文件模块如果需要处理文件路径,可以使用os.path模块中的对象和 方法;

如果需要使用命令行读取文件内容可以使用fileinput模块;

创建临时文件和文件夹可以使用tempfile模块;

OS模块常用方法

61859ecb2a6c8d7b215479d11c0c21db.png

6ae529fc0d620a0abcd976434b8a4477.png

os.path模块常用方法

c7aa3e27563779cbdc953414322ee5cd.png

db3b3fb5ff4ebcbbc793c9199091988c.png

shutil模块常用方法

0283536d5ec63e7d399f25fe129d7ece.png

os模块目录操作

f5c24979942324c75825670199d3034d.png

Python对图像文件的处理

安装Pillow库

586cfa67d01e0951e16eb14ecc56842c.png

import PIL #引入PIL中的所有类

from PIL import Image #单独引入Image类

PIL库的Image类常用方法

Image类的打开或创建图片方法描述Image.open(filename)根据参数加载图像文件

Image.new(mode,size,color)根据给定参数创建一个新图像

Image.open(StringIO.StringIO(buffer))从字符串中获取图像

Image.frombytes(mode,size,data)根据像素点data创建图像

Image.verify()对图像文件完整性进行检查,返回异常

Image类的4个处理图片的常用属性属性描述Image.format标识图像格式和来源,如果图像不是从文件读取,值为None

Image.mode图像的色彩模式,”L”为灰度图像,“RGB”为真彩色图像,“CMYK”为出版图像

Image.size图像的宽度和高度,单位为像素(px),返回值为二元元组

Image.pallette调色板属性,返回一个ImagePallete类型

Image还能读取序列图像,包括GIF、FLI、FLC、TIFF等格式,open()方法打开时自动加载序列中的第一帧,使用seek()和tell()方法可以在不同帧之间移动

Image类的图像转换和保存方法方法描述Image.save(filename,format)将图像保存为名为filename的文件,format是图片格式

Image.convert(mode)使用不同的参数,转换图像为新的模式

Image.thumbnail(size)创建图像的缩略图,size是缩略图尺寸的二元元组

Image类的图像旋转和缩放方法描述Image.resize(size)按size大小调整图像,生成副本

Image.rotate(angle)按angle角度逆时针旋转图像,生成副本

Image类的图像像素和通道处理方法方法描述Image.point(func)根据函数func的功能对每个元素进行运算,返回图像副本

Image.split()提取RGB图像的每个颜色通道,返回图像副本

Image.merge(mode,bands)合并通道,其中mode表示色彩,bands表示新的色彩通道

Image.blend(im1,im2,alpha)将两幅图片im1和im2按照如下公式插值后生成新的图像:im1×(1,0-alpha)+im2×alpha

PIL的ImageFilter类提供了10种图像过滤方法方法描述ImageFilter.BLUR图像的模糊效果

ImageFilter.CONTOUR图像的轮廓效果

ImageFilter.DETAIL图像的细节效果

ImageFilter.EDGE_ENHANCE图像的边界加强效果

ImageFilter.EDGE_ENHANCE_MORE图像的阈值加强效果

ImageFilter.EMBOSS图像的浮雕效果

ImageFilter.FIND_EDGES图像的边界效果

ImageFilter.SMOOTH图像的平滑效果

ImageFilter.SMOOTH_MORE图像的阈值平滑效果

ImageFilter.SHARPEN图像的锐化效果

利用Image类的filter()方法可以使用ImageFilter类,格式Image.filter(ImageFilter.function)

PIL的ImageEnhance类提供了5种图像增强和滤镜方法方法描述ImageEnhance.enhance(factor)对选择属性的数值增强factor倍

ImageEnhance.Color(im)调整图像的颜色平衡

ImageEnhance.Contrast(im)调整图像的对比度

ImageEnhance.Brightness(im)调整图像的亮度

ImageEnhance.Sharpness(im)调整图像的锐度

NumPy库

数组Arrays

NumPy数组是通常的Python数组的扩展。NumPy数组配备了大量的函数和运算符,可以帮助我们快速编写上面讨论过的各种类型计算的高性能代码。

创建数组

06b4c0698cb737404eee69046412e2b8.png

常用属性

ef4c63bf97078364654b67e4f0941b13.png

常用形态操作

ab3b613258624e61118af7b2052f9aee.png

切片和索引

切片:和Python列表类似,numpy数组可以使用切片语法。因为数组可以是多维的,所以你必须为每个维度指定好切片。1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33import numpy as np

a=np.random.rand(5,3)

print(a)

print(a[2])

print()

print(a[1:3])

print()

print(a[-5:-2:2])

print()

print(a[:3,:2])

print()

print(a[[0,1,2],[2,1,0]])

#数组中(0,2),(1,1)和(2,0)位置处的元素

#输出:

# [[0.44761556 0.81326569 0.79004551]

# [0.57454174 0.39755703 0.48081083]

# [0.68405094 0.74275781 0.90948634]

# [0.8489756 0.56085858 0.87524095]

# [0.14517911 0.79332683 0.67406689]]

# [0.68405094 0.74275781 0.90948634]

#

# [[0.57454174 0.39755703 0.48081083]

# [0.68405094 0.74275781 0.90948634]]

#

# [[0.44761556 0.81326569 0.79004551]

# [0.68405094 0.74275781 0.90948634]]

#

# [[0.44761556 0.81326569]

# [0.57454174 0.39755703]

# [0.68405094 0.74275781]]

#

# [0.79004551 0.39755703 0.68405094]

numpy库的算术运算函数

97e2b3b7174e4792b516ea80ca0b8165.png

numpy库的比较运算函数

3dae8a6731259686178fe807febb6242.png

图像和数据处理

图像和数组的转换

图像的数组表示和转换

1、将图像转换为数组:

im=Image.open(filename)

arr=np.array(im)

2、将数组存储为图像:

pil_im=Image.fromarray()

matplotlib库的使用

matplotlib库是提供数据绘图功能的第三方库,其pyplot字库主要用于实现各种数据展示图形的绘制。

matplotlib画图可以总结为3个步骤:获取数据——画出基本图形——设置细节

使用汉字

Matplotlib 默认情况不支持中文,我们需要这样设置:1

2matplotlib.rcParams['font.family']='SimHei'

matplotlib.rcParams['font.sans-serif']='SimHei'

8e79aeaa4c609610ee24fb56b7d6fe5a.png

常用绘图函数

5182c2a07b37b70a91a128dd0e29aad6.png

绘图区域函数

21eae27c7856c35bb4474280cb92d917.png

plt和pillow的结合使用

90d90b98c7bf9fccd1667222c6b73bde.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值