Image类是Pillow库中最重要的类
pip install pillow
首先导入Image模块
from PIL import Image
通过Image 类中的open ()方法,可以创建一个Image对象。语法格式:
im = Image.open(fp,mode="r")
fp:表示文件路径,字符串格式
mode: 可选参数
- from PIL import Image
- #打开图片
- img=Image.open(r"./t53.png")
- #显示图像
- img.show()
print(img.size)
print(img.format)
print(img.info)
print(img.mode)

Pillow库支持多种图片格式,可以直接使用open()方法读取图片。
图片格式的转换有两种方法
- from PIL import Image
-
- im=Image.open('./hh.png')
-
- ##这里可以使用save()方法将图片保存为其他格式的图片类型
-
- im.save('./hhh.bmp')
-
- #这时会返回一个新的Image对象
- image=im.convert('RGB')
在图像处理过程中,经常遇到需要将图片放大或缩小的操作。Image类提供了resize()方法可以实现任意缩小和放大图像
resize()函数的语法格式如下
resize(size, resample=image.BICUBIC, box=None, reducing_gap=None)
- import os
- from PIL import Image
- #读取该目录下所有图像的名字
- fileName = os.listdir('./image/T91_HR')
- print(fileName)
- #设定尺寸
- width = 350
- height = 350
- # 如果目录不存在,则创建目录
- if not os.path.exists(r'./hh'):
- os.mkdir(r'./hh')
- # 循环读取每一张图片
- for img in fileName:
- ##注意这里的路径必须是绝对路径,否则容易报错
- old_pic = Image.open('./image/T91_HR/'+img)
- ##这里返回一个新的Image对象
- new_image = old_pic.resize((width, height),Image.BILINEAR)
- print (new_image)
- new_image.save('./hh/'+img)
- from PIL import Image
- im=Image.open(r"./t53.png")
- #修改图像大小,以适应图像处理
- image=im.resize((450,400))
-
- #分离颜色通道,产生三个 Image对象
- r,g,b = image.split()
- r.show()
- g.show()
- b.show()
merge() 方法的语法格式如下:
Image.merge(mode, bands)
参数说明如下:
注意,该函数会返回一个新的 Image 对象。
- from PIL import Image
-
- im=Image.open("./t53.png")
- #修改图像大小,以适应图像处理
- image=im.resize((450,400))
- #分离颜色通道,产生三个 Image对象
- r,g,b = image.split()
- #重新组合颜色通道,返回先的Image对象
- image_merge=Image.merge('RGB',(b,g,r))
- image_merge.show()
Image 类提供的 crop() 函数可以使用矩形区域的方式对原图像进行裁剪,函数的语法格式如下:
crop(box=None)
box:表示裁剪区域,默认为 None,表示拷贝原图像。
- im = Image.open(r"./t53.png")
- box =(0,0,20,10)
- im_crop = im.crop(box)
- im_crop.show()
拷贝、粘贴操作几乎是成对出现的,Image 类提供了 copy() 和 paste() 方法来实现图像的复制和粘贴。其中复制操作(即 copy() 方法)比较简单,下面主要介绍 paste() 粘贴方法,语法格式如下所示:
paste(image, box=None, mask=None)
该函数的作用是将一张图片粘贴至另一张图片中。注意,粘贴后的图片模式将自动保持一致,不需要进行额外的转换。参数说明如下:
- im = Image.open("./t53.png")
- #复制一张图片副本
- im_copy=im.copy()
- #对副本进行裁剪
- im_crop = im_copy.crop((0,0,200,100))
- #创建一个新的图像作为蒙版,L模式,单颜色值
- image_new = Image.new('L', (200, 100), 200)
- image_new.show()
- #将裁剪后的副本粘贴至副本图像上,并添加蒙版
- im_copy.paste(im_crop,(100,100,300,200),mask=image_new)
- #显示粘贴后的图像
- im_copy.show()
图像的几何变换主要包括图像翻转、图像旋转和图像变换操作,Image 类提供了处理这些操作的函数 transpose()、rotate() 和 transform()。
该函数可以实现图像的垂直、水平翻转,语法格式如下:
Image.transpose(method)
method 参数决定了图片要如何翻转,参数值如下:
- im = Image.open("./hh.png")
- #返回一个新的Image对象
- im_out=im.transpose(Image.FLIP_LEFT_RIGHT) ###水平翻转
- im_out.show()
Image.rotate(angle, resample=PIL.Image.NEAREST, expand=None, center=None, translate=None, fillcolor=None)
参数说明如下:
- im = Image.open("./hh.png")
- #translate的参数值可以为负数,并将旋转图之外的区域填充为绿色
- #返回同一个新的Image对象
- im_out=im.rotate(45,translate=(0,-25),fillcolor="green")
- im_out.show()
Image.transform(size, method, data=None, resample=0)
参数说明:
- from PIL import Image
- im = Image.open("./hh.png")
- #设置图像大小250*250,并根据data的数据截取原图像的区域,生成新的图像
- im_out=im.transform((250,250),Image.EXTENT,data=[0,0,30 + im.width//4,im.height//3])
- im_out.show()
Pillow 通过 ImageFilter 类达到图像降噪的目的,该类中集成了不同种类的滤波器,通过调用它们从而实现图像的平滑、锐化、边界增强等图像降噪操作。

- # 导入Image类和ImageFilter类
- from PIL import Image,ImageFilter
- im = Image.open("./hh.jpg")
- #图像模糊处理
- im_blur=im.filter(ImageFilter.BLUR)
- ##生成轮廓图
- im2=im.filter(ImageFilter.CONTOUR)
- im2.show()
- #边缘检测
- im3=im.filter(ImageFilter.FIND_EDGES)
- im3.show()
- #浮雕图
- im4=im.filter(ImageFilter.EMBOSS)
- im4.show()
- #平滑图smooth
- im5=im.filter(ImageFilter.SMOOTH)
- im5.show()
将PIL.Image对象和ndarray对象相互转化。
img = Image.fromarray(array)
- from PIL import Image
- import numpy as np
-
- ##image对象
- img = Image.open("./hh.png")
- img.show()
- #Image图像转换为ndarray数组
- img_2 = np.array(img)
- print(img_2)
- #ndarray转换为Image图像
- arr_img = Image.fromarray(img_2)
- #显示图片
- arr_img.show()