基于jupyter notebook的python编程-----python的数字图像处理技巧学习(Python图像处理库:Pillow教程)

Doris ·
更新时间:2024-09-20
· 980 次阅读

基于jupyter notebook的python编程-----python的数字图像处理目录一、python中Image类的使用方法1、使用image打开一张图片并显示2、将图片另存为新的格式的图片二、图片转成jpg格式的另一种方法1、该方法的python代码如下2、运行结果如下:三、创建缩略图1、创建缩略图的代码如下:2、运行结果如下所示:四、通过OS、glob库确定图片属性1、通过OS流确定图片属性的代码如下2、运行结果五、裁剪、粘贴、与合并图片1、从图片中复制子图像2、处理子图,粘贴回原图3、分离和合并通道六、图像的几何变换1、图像简单几何变换2、图像的置换3、图像的模式转换七、图像的增强1、Filter的图像增强2、像素点处理3、高级图片增强八、读取图片的其他方法1、通过string中读取2、从tar文件中读取图像3、draft模式
python图像处理库有很多种,本次博客,林君学长将给大家讲解一下python的基本图像处理库-----Pillow
本次博客的主要内容或者目的如下: 理解Python的数字图像处理技术 熟悉python基本图像处理库Pillow的实验方法 一、python中Image类的使用方法

Pillow库中最重要的类就是Image,该类存在于同名的模块中。可以通过以下几种方式实例化:从文件中读取图片,处理其他图片得到,或者直接创建一个图片

1、使用image打开一张图片并显示

标准版本的show()方法不是很有效率,因为它先将图像保存为一个临时文件,然后使用xv进行显示。如果没有安装xv,该函数甚至不能工作。但是该方法非常便于debug和test。(windows中应该调用默认图片查看器打开)

1)、使用Image模块中的open函数打开一张图片,并利用show函数显示这张图片,python代码如下:

#打开图片 from PIL import Image im = Image.open("D://myself1.jpg") print(im.format, im.size, im.mode) im.show()

2)、python代码运行的结果如下:

终端显示图片的属性:
在这里插入图片描述 打开图片显示如下:
在这里插入图片描述 2、将图片另存为新的格式的图片

Pillow库支持相当多的图片格式。直接使用Image模块中的open()函数读取图片,而不必先处理图片的格式,Pillow库自动根据文件决定格式。
Image模块中的save()函数可以保存图片,除非你指定文件格式,那么文件名中的扩展名用来指定文件格式。

1)、利用Image模块中的save函数,将图片另存为jpg格式的图片

#另存为jpg图片 from PIL import Image im = Image.open("D://myself1.jpg") im.save("D://myself2.jpg") im1 = Image.open("D://myself2.jpg") print(im.format, im.size, im.mode) im1.show()

运行结果如下所示:
在D盘的环境下找到生成的图片:
在这里插入图片描述
在这里插入图片描述
2)、利用Image模块中的save函数,将图片另存为png格式的图片

#另存为png图片 from PIL import Image im = Image.open("D://myself1.jpg") im.save("D://myself3.png") im1 = Image.open("D://myself3.png") print(im.format, im.size, im.mode) im1.show()

运行结果如下所示:
在D盘的相应位置,可以发现该图片,存的图片尺寸变大了哦!
在这里插入图片描述
在这里插入图片描述

二、图片转成jpg格式的另一种方法 1、该方法的python代码如下 #图片装换为jpg格式 from PIL import Image def IsValidImage(img_path):#判断文件路径是否有效 bValid = True try: Image.open(img_path).verify() except: bValid = False return bValid def transimg(path,img_path):#转换 if IsValidImage(path): try: str = img_path.rsplit(".", 1) output_img_path = str[0] + ".jpg" print(output_img_path) im = Image.open(path) path1="D://"+output_img_path im.save(path1) return True except: return False else: return False if __name__ == '__main__': path = "D://"+img_path img_path="myself3.png" print(transimg(path,img_path)) 2、运行结果如下:

在这里插入图片描述
在这里插入图片描述

三、创建缩略图 1、创建缩略图的代码如下: #缩略图 import os import glob from PIL import Image def thumbnail_pic(path): a=glob.glob(r'D://myself4.png') for x in a: name=os.path.join(path,x) im=Image.open(name) im.thumbnail((80,80)) print(im.format,im.size,im.mode) im.save(name,'JPEG') print('完成压缩!') if __name__=='__main__': path='.' thumbnail_pic(path)

必须指出的是除非必须,Pillow不会解码或raster数据。当你打开一个文件,Pillow通过文件头确定文件格式,大小,mode等数据,余下数据直到需要时才处理。这意味着打开文件非常快,与文件大小和压缩格式无关。

2、运行结果如下所示:

1)、终端提示压缩完成
在这里插入图片描述
2)、打开对应位置的图片,如下所示:
在这里插入图片描述

四、通过OS、glob库确定图片属性 1、通过OS流确定图片属性的代码如下 #确定图片属性 import os import glob from PIL import Image def shuxing(path): a=glob.glob(r'D://myself3.jpg') for x in a: name=os.path.join(path,x) im=Image.open(name) print(im.format,im.size,im.mode) if __name__=='__main__': path='.' shuxing(path) 2、运行结果

在这里插入图片描述

五、裁剪、粘贴、与合并图片 1、从图片中复制子图像

1)、复制子图像的python代码如下所示:

#从图片中复制子图像 from PIL import Image im = Image.open("D://myself3.png") box = im.copy() #直接复制图像 box = (100, 100, 400, 400) region = im.crop(box) region.show()

2)、运行结果如下所示:
在这里插入图片描述

box = (100, 100, 400, 400) 信息代表(left, upper, right, lower)。 Pillow左边系统的原点(0,0)为图片的左上角。坐标中的数字单位为像素点,所以上例中截取的图片大小为300*300像素^2。原图课参考上面的图像哦!

2、处理子图,粘贴回原图

1)、粘贴回原图的python代码如下所示:

#处理子图像,粘贴回原图 from PIL import Image im = Image.open("D://myself3.png") box = im.copy() #直接复制图像 box = (100, 100, 400, 400) region = im.crop(box) region = region.transpose(Image.ROTATE_90)#旋转90度 im.paste(region,box) im.show()

将子图paste回原图时,子图的region必须和给定box的region吻合。该region不能超过原图。而原图和region的mode不需要匹配,Pillow会自动处理。
另一个例子

2)、运行结果
在这里插入图片描述

3、分离和合并通道

1)、分离合并并通道的python代码如下所示:

#分离和合并通道 from PIL import Image im = Image.open("D://myself3.png") r, g, b = im.split() im = Image.merge("RGB", (b, g, r)) im.show()

对于单通道图片,split()返回图像本身。为了处理单通道图片,必须先将图片转成RGB

2)、运行结果如下所示:
在这里插入图片描述

六、图像的几何变换 1、图像简单几何变换

1)、代码如下:

#简单的几何变换 from PIL import Image im = Image.open("D://myself3.png") out = im.resize((128, 128)) out = im.rotate(45) # 顺时针角度表示 out.show()

2)、运行结果如下所示:
在这里插入图片描述

2、图像的置换

1)、置换图像代码如下所示:

#置换图像 from PIL import Image im = Image.open("D://myself3.png") #out = im.transpose(Image.FLIP_LEFT_RIGHT) #out = im.transpose(Image.FLIP_TOP_BOTTOM) #颠倒 #out = im.transpose(Image.ROTATE_90)#向左旋转90度 out = im.transpose(Image.ROTATE_180)#向左旋转180度 #out = im.transpose(Image.ROTATE_270)#向左旋转270度 out.show()

大家可以去掉注释依次进行实现!

transpose()和rotate()没有性能差别。 通用的图像变换方法可以使用transform()

2)、运行结果如下所示:
在这里插入图片描述

3、图像的模式转换

1)、模式转换代码如下:

#模式转换 from PIL import Image im = Image.open('D://myself3.png').convert('L') im.show()

2)、运行结果如下所示:
在这里插入图片描述

七、图像的增强

ImageFilter模块包含很多预定义的增强filters,通过filter()方法使用

1、Filter的图像增强

1)、增强图像的代码如下所示:

#图像增强 from PIL import ImageFilter im = Image.open('D://myself3.png') out = im.filter(ImageFilter.DETAIL) out.show()

2)、运行的后与原图的对比结果如下所示:
在这里插入图片描述

2、像素点处理

1)、像素点处理的代码如下所示:

#像素点处理 # multiply each pixel by 1.2 from PIL import ImageFilter im = Image.open('D://myself3.png') out = im.point(lambda i: i * 1.2) out.show()

point()方法通过一个函数或者查询表对图像中的像素点进行处理(例如对比度操作)
上述方法可以利用简单的表达式进行图像处理,通过组合point()和paste()还能选择性地处理图片的某一区域。

2)、运行的后与原图的对比结果如下所示:
在这里插入图片描述

3、高级图片增强

1)、高级图片增强的代码如下:

#高级图像增强 from PIL import ImageEnhance im = Image.open('D://myself3.png') enh = ImageEnhance.Contrast(im) enh.enhance(1.3).show("30% more contrast")

对其他高级图片增强,应该使用ImageEnhance模块 。一旦有一个Image对象,应用ImageEnhance对象就能快速地进行设置。 可以使用以下方法调整对比度、亮度、色平衡和锐利度。

2)、运行的后与原图的对比结果如下所示:
在这里插入图片描述

八、读取图片的其他方法

之前说到Image模块的open()函数已经足够日常使用。该函数的参数也可以是一个文件对象。这里介绍三种其他方法。

1、通过string中读取

1)、通过string流读取的图像数据代码如下:

#从string中读取图片 import StringIO im = Image.open(StringIO.StringIO('D://myself3.png')) im.show()

2)、读取的结果如下所示:
在这里插入图片描述

2、从tar文件中读取图像

1)、tar文件读取图像代码:

#从tar文件中读取 from PIL import TarIO fp = TarIO.TarIO("D://Imaging.tar", "Imaging/myself3.png") im = Image.open(fp) im.show()

2)、读取的结果:
在这里插入图片描述

3、draft模式

1)、代码如下:

#draft模式 from PIL import Image im = Image.open('D://myself3.png') print("original =", im.mode, im.size) im.draft("L", (100, 100)) print("draft =", im.mode, im.size) im.show()

2)、运行结果如下:
在这里插入图片描述
以上就是本次博客的全部内容了啊,希望对小伙伴理解python的基础图像处理库Pillow有用哦!遇到问题的小伙伴记得评论区留言哦,林君学长看到会给大家解答的,这个学长不太冷!
陈一月的又一天编程岁月^ _ ^


作者:陈一月的编程岁月



python的 数字图像 数字图像处理 技巧 学习 notebook jupyter 图像处理 Python

需要 登录 后方可回复, 如果你还没有账号请 注册新账号